diff --git a/buildConstants.js b/buildConstants.js index 5c3f239..ca302d2 100644 --- a/buildConstants.js +++ b/buildConstants.js @@ -16,6 +16,7 @@ const EXCLUDED_FILES = [ '.prettierignore', '.prettierrc', '.dockerignore', + 'test', 'build', 'release', 'node_modules', diff --git a/package.json b/package.json index 0395f41..0c60ae1 100644 --- a/package.json +++ b/package.json @@ -101,11 +101,13 @@ }, "simple-git-hooks": { "pre-commit": "npx lint-staged", - "pre-push": "npx eslint ." + "pre-push": "npx eslint . && npm run test:unit" }, "scripts": { "lint": "eslint . --max-warnings=0", - "package": "node esbuild.package.js" + "test:unit": "node --experimental-test-module-mocks --test ./test/**/*.spec.js", + "package": "node esbuild.package.js", + "postinstall": "npx simple-git-hooks" }, "devDependencies": { "@hackolade/hck-esbuild-plugins-pack": "0.0.1", diff --git a/test/testExample/calculator.js b/test/testExample/calculator.js new file mode 100644 index 0000000..2e8421d --- /dev/null +++ b/test/testExample/calculator.js @@ -0,0 +1,11 @@ +const { add, multiply } = require('./math'); + +function calculateSum(a, b) { + return add(a, b); +} + +function calculateProduct(a, b) { + return multiply(a, b); +} + +module.exports = { calculateSum, calculateProduct }; diff --git a/test/testExample/calculator.spec.js b/test/testExample/calculator.spec.js new file mode 100644 index 0000000..8cb0618 --- /dev/null +++ b/test/testExample/calculator.spec.js @@ -0,0 +1,33 @@ +const { mock, before, describe, it } = require('node:test'); +const assert = require('node:assert'); + +describe('calculator', () => { + let calculator; + let addSpy; + let multiplySpy; + + before(() => { + addSpy = mock.fn(() => 42); + multiplySpy = mock.fn(() => -1); + + mock.module('./math', { + namedExports: { + add: addSpy, + multiply: multiplySpy, + }, + }); + calculator = require('./calculator'); + }); + + it('calculateSum uses mocked add function', () => { + const result = calculator.calculateSum(2, 3); + assert.strictEqual(result, 42); + assert.strictEqual(addSpy.mock.calls.length, 1); + }); + + it('calculateProduct uses mocked multiply function', () => { + const result = calculator.calculateProduct(2, 3); + assert.strictEqual(result, -1); + assert.strictEqual(multiplySpy.mock.calls.length, 1); + }); +}); diff --git a/test/testExample/math.js b/test/testExample/math.js new file mode 100644 index 0000000..3307141 --- /dev/null +++ b/test/testExample/math.js @@ -0,0 +1,9 @@ +function add(a, b) { + return a + b; +} + +function multiply(a, b) { + return a * b; +} + +module.exports = { add, multiply };