diff --git a/package.json b/package.json index a525b0d..9175b65 100644 --- a/package.json +++ b/package.json @@ -46,11 +46,18 @@ "@stryker-mutator/jest-runner": "2.1.0", "coveralls": "3.0.7", "cz-conventional-changelog": "3.0.2", - "jest": "24.9.0", + "jest": "^24.9.0", + "jest-watch-typeahead": "^0.4.0", "semantic-release": "15.13.24" }, "dependencies": { "enquirer": "^2.3.2", "npm": "^6.12.0" + }, + "jest": { + "watchPlugins": [ + "jest-watch-typeahead/filename", + "jest-watch-typeahead/testname" + ] } } diff --git a/src/__snapshots__/index.error.integration.test.js.snap b/src/__snapshots__/index.error.integration.test.js.snap new file mode 100644 index 0000000..4a8c1b9 --- /dev/null +++ b/src/__snapshots__/index.error.integration.test.js.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Should throw an error if the project is not found 1`] = `"No NPM project found"`; diff --git a/src/bin.js b/src/bin.js index 318bb28..6f002e7 100644 --- a/src/bin.js +++ b/src/bin.js @@ -1,4 +1,4 @@ #!/usr/bin/env node "use strict"; -require("./index.js")(process.argv); +require("./index.js")(process.argv).catch(console.error); diff --git a/src/index.error.integration.test.js b/src/index.error.integration.test.js new file mode 100644 index 0000000..f71a99c --- /dev/null +++ b/src/index.error.integration.test.js @@ -0,0 +1,18 @@ +"use strict"; +jest.unmock("npm"); +jest.mock("npm", () => ({ + load: jest.fn(callback => callback()), + config: { + sources: { + project: { + path: undefined + } + } + } +})); + +const main = require("./index.js"); + +it("Should throw an error if the project is not found", async () => { + await expect(main()).rejects.toMatchSnapshot(); +}); diff --git a/src/index.integration.test.js b/src/index.integration.test.js index 6b955a1..05e7143 100644 --- a/src/index.integration.test.js +++ b/src/index.integration.test.js @@ -2,14 +2,16 @@ const npm = require("npm"); const main = require("./index.js"); -const { readNpmScripts } = require("./read-npm-scripts.js"); +const { readNpmScripts, npmProjectLogPrefix } = require("./read-npm-scripts.js"); it("Should work", async () => { + const spy = jest.spyOn(global.console, "log"); const scripts = await readNpmScripts(); const scriptNames = Object.keys(scripts); const argv = await main(); expect(npm.load).toBeCalled(); + expect(spy.mock.calls[0][0].startsWith(npmProjectLogPrefix)).toBe(true); expect(npm.run).toBeCalled(); expect(scriptNames).toContain(npm.run.mock.calls[0][0][0]); expect(argv).toBe(npm.run.mock.calls[0][0]); diff --git a/src/index.js b/src/index.js index efa3e45..f04f809 100644 --- a/src/index.js +++ b/src/index.js @@ -15,8 +15,7 @@ const main = argv => { npm.run(params); resolve(params); }); - }) - .catch(console.error); + }); }; module.exports = main; diff --git a/src/read-npm-scripts.js b/src/read-npm-scripts.js index 2ba070a..3a16002 100644 --- a/src/read-npm-scripts.js +++ b/src/read-npm-scripts.js @@ -2,19 +2,21 @@ const npm = require("npm"); +const npmProjectLogPrefix = "NPM project: "; const readNpmScripts = () => - new Promise(resolve => { + new Promise((resolve, reject) => { npm.load(() => { if (!npm.config.sources.project.path) { - throw new Error("No NPM project found"); + reject("No NPM project found"); } const packageJsonPath = npm.config.sources.project.path.replace(".npmrc", "package.json"); - console.log(`NPM project: ${packageJsonPath}`); + console.log(npmProjectLogPrefix + packageJsonPath); const packageJson = require(packageJsonPath); resolve(packageJson.scripts); }); }); module.exports = { - readNpmScripts + readNpmScripts, + npmProjectLogPrefix }; diff --git a/test-projects/import-nprr/package-lock.json b/test-projects/import-nprr/package-lock.json index 87d2ba8..13709db 100644 --- a/test-projects/import-nprr/package-lock.json +++ b/test-projects/import-nprr/package-lock.json @@ -3070,8 +3070,8 @@ } }, "nprr": { - "version": "file:../../nprr-0.0.0-development.tgz", - "integrity": "sha512-8r5+qK5HpXmBHKbPrODG6KmHGyAuUpvLQCmCwEIfet6l4HxVspClEbl1BT/+dJbnI/ieaJjLCEBELtsynv5Mig==", + "version": "file:../../nprr-1.0.0.tgz", + "integrity": "sha512-H67tNVdbgqDyx9wjbe7sT/uFbn95uf3o/2FEgExe8BsLQ2gVaze7d82dBtxJYetZRlwoDbxgsvoG6TH1YBIC4Q==", "requires": { "enquirer": "^2.3.2", "npm": "^6.12.0" diff --git a/test-projects/import-nprr/package.json b/test-projects/import-nprr/package.json index a775782..5058fae 100644 --- a/test-projects/import-nprr/package.json +++ b/test-projects/import-nprr/package.json @@ -11,6 +11,6 @@ "author": "", "license": "ISC", "dependencies": { - "nprr": "file:../../nprr-0.0.0-development.tgz" + "nprr": "file:../../nprr-1.0.0.tgz" } }