From b29248e46b1c0b374a602e4f313deddd85962285 Mon Sep 17 00:00:00 2001 From: rosen-vladimirov Date: Fri, 5 Jul 2019 17:09:31 +0300 Subject: [PATCH] fix: migrate fails when karma.config.js is missing In case you've installed `nativescript-unit-test-runner` , but you've not used `tns test init`, `tns migrate` command fails with error: `Could not migrate the project! The error is: Error: ENOENT: no such file or directory, open '/.migration_backup/karma.conf.js'` Skip the migration of the `karma.conf.js` file in case it is missing. Also, ensure `karma-webpack` is always added by the migration when `nativescript-unit-test-runner` is migrated. --- lib/controllers/migrate-controller.ts | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/controllers/migrate-controller.ts b/lib/controllers/migrate-controller.ts index ed27332327..33a9ccded4 100644 --- a/lib/controllers/migrate-controller.ts +++ b/lib/controllers/migrate-controller.ts @@ -286,23 +286,26 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC private async migrateUnitTestRunner(projectData: IProjectData, migrationBackupDirPath: string): Promise { // Migrate karma.conf.js - const oldKarmaContent = this.$fs.readText(path.join(migrationBackupDirPath, constants.KARMA_CONFIG_NAME)); + const pathToKarmaConfig = path.join(migrationBackupDirPath, constants.KARMA_CONFIG_NAME); + if (this.$fs.exists(pathToKarmaConfig)) { + const oldKarmaContent = this.$fs.readText(pathToKarmaConfig); - const regExp = /frameworks:\s+\[([\S\s]*?)\]/g; - const matches = regExp.exec(oldKarmaContent); - const frameworks = (matches && matches[1] && matches[1].trim()) || '["jasmine"]'; + const regExp = /frameworks:\s+\[([\S\s]*?)\]/g; + const matches = regExp.exec(oldKarmaContent); + const frameworks = (matches && matches[1] && matches[1].trim()) || '["jasmine"]'; - const testsDir = path.join(projectData.appDirectoryPath, 'tests'); - const relativeTestsDir = path.relative(projectData.projectDir, testsDir); - const testFiles = `'${fromWindowsRelativePathToUnix(relativeTestsDir)}/**/*.*'`; + const testsDir = path.join(projectData.appDirectoryPath, 'tests'); + const relativeTestsDir = path.relative(projectData.projectDir, testsDir); + const testFiles = `'${fromWindowsRelativePathToUnix(relativeTestsDir)}/**/*.*'`; - const karmaConfTemplate = this.$resources.readText('test/karma.conf.js'); - const karmaConf = _.template(karmaConfTemplate)({ frameworks, testFiles }); - this.$fs.writeFile(path.join(projectData.projectDir, constants.KARMA_CONFIG_NAME), karmaConf); + const karmaConfTemplate = this.$resources.readText('test/karma.conf.js'); + const karmaConf = _.template(karmaConfTemplate)({ frameworks, testFiles }); + this.$fs.writeFile(path.join(projectData.projectDir, constants.KARMA_CONFIG_NAME), karmaConf); + } // Dependencies to migrate const dependencies = [ - { packageName: "karma-webpack", verifiedVersion: "3.0.5", isDev: true, shouldAddIfMissing: !this.hasDependency({ packageName: "karma-webpack", isDev: true }, projectData) }, + { packageName: "karma-webpack", verifiedVersion: "3.0.5", isDev: true, shouldAddIfMissing: true }, { packageName: "karma-jasmine", verifiedVersion: "2.0.1", isDev: true }, { packageName: "karma-mocha", verifiedVersion: "1.3.0", isDev: true }, { packageName: "karma-chai", verifiedVersion: "0.1.0", isDev: true },