Skip to content

Commit ab56cc2

Browse files
committed
get native module mocking working (opt-in via CLI flag)
1 parent 65c90cd commit ab56cc2

File tree

3 files changed

+30
-22
lines changed

3 files changed

+30
-22
lines changed

package-lock.json

+7-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@
33
"private": true,
44
"type": "module",
55
"scripts": {
6-
"test": "node --test ./src/*.test.js",
7-
"dev": "node --test --watch ./src/*.test.js",
6+
"test": "node --test --experimental-test-module-mocks ./src/*.test.js",
7+
"dev": "node --test --watch --experimental-test-module-mocks ./src/*.test.js",
88
"test:all": "npm run test:coverage && npm run test:only && npm run test:seq && npm run test:par",
99
"test:coverage": "node --test --experimental-test-coverage ./src/*.test.js",
1010
"test:coverage:file": "node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=lcov.info ./src/*.test.js",
1111
"report:html": "npx @lcov-viewer/cli lcov -o ./coverage ./lcov.info",
12-
"test:seq": "node --test --test-concurrency=1 ./src/*.test.js",
13-
"test:par": "node --test --test-concurrency=5 ./src/*.test.js",
12+
"test:seq": "node --test --test-concurrency=1 --experimental-test-module-mocks ./src/*.test.js",
13+
"test:par": "node --test --test-concurrency=5 --experimental-test-module-mocks ./src/*.test.js",
1414
"test:only": "node --test --test-only src/*.only.js",
1515
"test:failing": "node --test src/*.failing.js && echo 'Error: test run should fail' && exit 1 || echo 'Success: test run failed as expected' && exit 0",
1616
"lint": "biome lint --apply ./src",
1717
"format": "biome format --write ."
1818
},
1919
"license": "MIT",
2020
"dependencies": {
21+
"@types/node": "20.14.12",
2122
"axios": "1.6.8",
2223
"bcrypt": "5.1.1",
2324
"express": "4.19.2",

src/02.04-model-mock-native.test.js

+18-12
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
1-
import { describe, test, mock, before } from "node:test";
1+
import { describe, test, mock, before, after } from "node:test";
22
import assert from "node:assert/strict";
33

4-
let Model;
54
/**
65
* mock.module() was added in 22.3.0
76
*/
87
const isNode22Point3OrLower = (() => {
98
const [major, minor, _patch] = process.versions.node.split(".");
109
return !(parseInt(major, 10) >= 22 && parseInt(minor, 10) >= 3);
1110
})();
12-
describe('Class extends Mock - native', {skip: isNode22Point3OrLower }, () => {
13-
test("It should not throw when passed a model containing an empty list of meetings", async () => {
14-
mock.module('sequelize', {
11+
12+
let Model;
13+
/** @type {ReturnType<typeof mock['module']>}*/
14+
let modelMock;
15+
describe("Class extends Mock - native", { skip: isNode22Point3OrLower }, () => {
16+
before(async () => {
17+
modelMock = mock.module("sequelize", {
1518
namedExports: {
16-
Model: class { }
17-
}
19+
Model: class {},
20+
},
1821
});
1922

20-
const { default: _model } = await import(`./02.04-model.js?ts=${Date.now()}`);
21-
Model = _model;
22-
23+
const { default: model } = await import("./02.04-model.js");
24+
Model = model;
25+
});
26+
after(() => {
27+
modelMock.restore();
28+
});
29+
test("It should not throw when passed a model containing an empty list of meetings", async (t) => {
2330
const model = new Model();
2431
model.meetings = [];
2532
assert.doesNotThrow(model.isAvailable.bind(model, new Date(Date.now())));
@@ -31,5 +38,4 @@ describe('Class extends Mock - native', {skip: isNode22Point3OrLower }, () => {
3138
});
3239
assert.doesNotThrow(model.isAvailable.bind(model, new Date(Date.now())));
3340
});
34-
35-
})
41+
});

0 commit comments

Comments
 (0)