diff --git a/lib/commands/test-init.ts b/lib/commands/test-init.ts index 0593173dbc..69736ac8a7 100644 --- a/lib/commands/test-init.ts +++ b/lib/commands/test-init.ts @@ -37,6 +37,25 @@ class TestInitCommand implements ICommand { 'save-dev': true, optional: false, }); + + const modulePath = path.join(projectDir, "node_modules", mod); + const modulePackageJsonPath = path.join(modulePath, "package.json"); + const modulePackageJsonContent = this.$fs.readJson(modulePackageJsonPath); + const modulePeerDependencies = modulePackageJsonContent.peerDependencies || {}; + + for (let peerDependency in modulePeerDependencies) { + let dependencyVersion = modulePeerDependencies[peerDependency] || "*"; + + // catch errors when a peerDependency is already installed + // e.g karma is installed; karma-jasmine depends on karma and will try to install it again + try { + await this.$npm.install(`${peerDependency}@${dependencyVersion}`, projectDir, { + 'save-dev': true + }); + } catch (e) { + this.$logger.error(e.message); + } + } } await this.$pluginsService.add('nativescript-unit-test-runner', this.$projectData); diff --git a/lib/node-package-manager.ts b/lib/node-package-manager.ts index fd863640b4..45591a8122 100644 --- a/lib/node-package-manager.ts +++ b/lib/node-package-manager.ts @@ -76,10 +76,10 @@ export class NodePackageManager implements INodePackageManager { let diff = dependencyDiff.concat(devDependencyDiff); if (diff.length <= 0 && dependenciesBefore.length === dependenciesAfter.length && packageName !== pathToSave) { - this.$errors.failWithoutHelp(`The plugin ${packageName} is already installed`); + this.$logger.warn(`The plugin ${packageName} is already installed`); } if (diff.length <= 0 && dependenciesBefore.length !== dependenciesAfter.length) { - this.$errors.failWithoutHelp(`Couldn't install package correctly`); + this.$logger.warn(`Couldn't install package ${packageName} correctly`); } return diff;