Skip to content

Commit 34214c9

Browse files
petekanevrosen-vladimirov
authored andcommitted
Install karma peer dependencies on test init (#2693)
* implicitly install karma-<testingFramework>'s peer dependencies on test init command * add exception handling when installing packages already present in the project * log warning instead of throwing errors when a package's name couldn't be determined when installed using the node-package-manager service
1 parent b094d1f commit 34214c9

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

lib/commands/test-init.ts

+19
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,25 @@ class TestInitCommand implements ICommand {
3737
'save-dev': true,
3838
optional: false,
3939
});
40+
41+
const modulePath = path.join(projectDir, "node_modules", mod);
42+
const modulePackageJsonPath = path.join(modulePath, "package.json");
43+
const modulePackageJsonContent = this.$fs.readJson(modulePackageJsonPath);
44+
const modulePeerDependencies = modulePackageJsonContent.peerDependencies || {};
45+
46+
for (let peerDependency in modulePeerDependencies) {
47+
let dependencyVersion = modulePeerDependencies[peerDependency] || "*";
48+
49+
// catch errors when a peerDependency is already installed
50+
// e.g karma is installed; karma-jasmine depends on karma and will try to install it again
51+
try {
52+
await this.$npm.install(`${peerDependency}@${dependencyVersion}`, projectDir, {
53+
'save-dev': true
54+
});
55+
} catch (e) {
56+
this.$logger.error(e.message);
57+
}
58+
}
4059
}
4160

4261
await this.$pluginsService.add('nativescript-unit-test-runner', this.$projectData);

lib/node-package-manager.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ export class NodePackageManager implements INodePackageManager {
7676
let diff = dependencyDiff.concat(devDependencyDiff);
7777

7878
if (diff.length <= 0 && dependenciesBefore.length === dependenciesAfter.length && packageName !== pathToSave) {
79-
this.$errors.failWithoutHelp(`The plugin ${packageName} is already installed`);
79+
this.$logger.warn(`The plugin ${packageName} is already installed`);
8080
}
8181
if (diff.length <= 0 && dependenciesBefore.length !== dependenciesAfter.length) {
82-
this.$errors.failWithoutHelp(`Couldn't install package correctly`);
82+
this.$logger.warn(`Couldn't install package ${packageName} correctly`);
8383
}
8484

8585
return diff;

0 commit comments

Comments
 (0)