Skip to content

Commit 68085c9

Browse files
authored
Merge pull request #3094 from modernweb-dev/migrate/test-runner-core-node-test
test(test-runner-core): migrate tests to node:test
2 parents 0522abc + d9768c9 commit 68085c9

3 files changed

Lines changed: 218 additions & 265 deletions

File tree

packages/test-runner-core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
},
3434
"scripts": {
3535
"build": "tsc",
36-
"test:node": "mocha test/**/*.test.ts --require ts-node/register --reporter dot",
37-
"test:watch": "mocha test/**/*.test.ts --require ts-node/register --watch --watch-files src,test"
36+
"test:node": "node --experimental-strip-types --test --test-force-exit test/**/*.test.ts",
37+
"test:watch": "node --experimental-strip-types --test --test-force-exit --watch test/**/*.test.ts"
3838
},
3939
"files": [
4040
"*.d.ts",

packages/test-runner-core/test/src/runner/TestRunner.test.ts

Lines changed: 69 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,27 @@
1-
import * as hanbi from 'hanbi';
2-
import { expect } from 'chai';
3-
import portfinder from 'portfinder';
4-
import path from 'path';
5-
6-
import { BrowserLauncher } from '../../../src/browser-launcher/BrowserLauncher.js';
7-
import { TestRunnerCoreConfig } from '../../../src/config/TestRunnerCoreConfig.js';
8-
import { TestRunner } from '../../../src/runner/TestRunner.js';
9-
import { Logger } from '../../../src/logger/Logger.js';
10-
import { SESSION_STATUS } from '../../../src/test-session/TestSessionStatus.js';
11-
import { TestRunnerGroupConfig } from '../../../src/index.js';
1+
import assert from 'node:assert/strict';
2+
import path from 'node:path';
3+
import { describe, it, mock } from 'node:test';
124

13-
interface BrowserStubs {
14-
stop: hanbi.Stub<Exclude<BrowserLauncher['stop'], undefined>>;
15-
startDebugSession: hanbi.Stub<BrowserLauncher['startDebugSession']>;
16-
startSession: hanbi.Stub<BrowserLauncher['startSession']>;
17-
stopSession: hanbi.Stub<BrowserLauncher['stopSession']>;
18-
isActive: hanbi.Stub<BrowserLauncher['isActive']>;
19-
getBrowserUrl: hanbi.Stub<BrowserLauncher['getBrowserUrl']>;
20-
}
5+
import portfinder from 'portfinder';
216

22-
function createBrowserStub(): [BrowserStubs, BrowserLauncher] {
23-
const spies = {
24-
stop: hanbi.spy(),
25-
getBrowserUrl: hanbi.spy(),
26-
startDebugSession: hanbi.spy(),
27-
startSession: hanbi.spy(),
28-
stopSession: hanbi.spy(),
29-
isActive: hanbi.spy(),
7+
import type { BrowserLauncher } from '../../../dist/browser-launcher/BrowserLauncher.js';
8+
import type { TestRunnerCoreConfig } from '../../../dist/config/TestRunnerCoreConfig.js';
9+
import { TestRunner } from '../../../dist/runner/TestRunner.js';
10+
import type { Logger } from '../../../dist/logger/Logger.js';
11+
import { SESSION_STATUS } from '../../../dist/test-session/TestSessionStatus.js';
12+
import type { TestRunnerGroupConfig } from '../../../dist/index.js';
13+
14+
function createBrowserStub(): BrowserLauncher {
15+
return {
16+
name: 'myBrowser',
17+
type: 'myBrowser',
18+
stop: mock.fn(() => Promise.resolve()),
19+
getBrowserUrl: mock.fn(() => ''),
20+
startDebugSession: mock.fn(() => Promise.resolve()),
21+
startSession: mock.fn(() => Promise.resolve()),
22+
stopSession: mock.fn(() => Promise.resolve({})),
23+
isActive: mock.fn(() => true),
3024
};
31-
spies.stop.returns(Promise.resolve());
32-
spies.getBrowserUrl.returns('');
33-
spies.startDebugSession.returns(Promise.resolve());
34-
spies.startSession.returns(Promise.resolve());
35-
spies.stopSession.returns(Promise.resolve({}));
36-
spies.isActive.returns(true);
37-
return [
38-
spies,
39-
{
40-
name: 'myBrowser',
41-
type: 'myBrowser',
42-
stop: spies.stop.handler,
43-
getBrowserUrl: spies.getBrowserUrl.handler,
44-
startDebugSession: spies.startDebugSession.handler,
45-
startSession: spies.startSession.handler,
46-
stopSession: spies.stopSession.handler,
47-
isActive: spies.isActive.handler,
48-
},
49-
];
5025
}
5126

5227
const logger: Logger = {
@@ -67,15 +42,15 @@ async function createTestRunner(
6742
port: 9000 + Math.floor(Math.random() * 1000),
6843
});
6944

70-
const [browserStubs, browser] = createBrowserStub();
45+
const browser = createBrowserStub();
7146

72-
console.log(path.resolve(__dirname, '..', '..', '..', '..', '..'));
47+
console.log(path.resolve(import.meta.dirname, '..', '..', '..', '..', '..'));
7348

7449
const config: TestRunnerCoreConfig = {
75-
files: [path.resolve(__dirname, '..', '..', 'fixtures', 'a.test.js')],
50+
files: [path.resolve(import.meta.dirname, '..', '..', 'fixtures', 'a.test.js')],
7651
reporters: [],
7752
logger,
78-
rootDir: path.resolve(__dirname, '..', '..', '..', '..', '..'),
53+
rootDir: path.resolve(import.meta.dirname, '..', '..', '..', '..', '..'),
7954
testFramework: { path: 'my-framework.js' },
8055
concurrentBrowsers: 2,
8156
concurrency: 10,
@@ -94,24 +69,24 @@ async function createTestRunner(
9469
...extraConfig,
9570
};
9671
const runner = new TestRunner(config, groupConfigs);
97-
return { runner, browser, browserStubs };
72+
return { runner, browser };
9873
}
9974

10075
describe('TestRunner', function () {
10176
it('can run a single test file', async () => {
102-
const { runner, browserStubs } = await createTestRunner();
77+
const { runner, browser } = await createTestRunner();
10378

10479
await runner.start();
105-
expect(runner.started).to.equal(true, 'runner is started');
106-
expect(browserStubs.startSession.callCount).to.equal(1);
80+
assert.equal(runner.started, true, 'runner is started');
81+
assert.equal(browser.startSession.mock.callCount(), 1);
10782

10883
const sessions = Array.from(runner.sessions.all());
109-
expect(sessions.length).to.equal(1, 'one session is created');
84+
assert.equal(sessions.length, 1, 'one session is created');
11085
await runner.stop();
11186
});
11287

11388
it('closes test runner for a successful test', async () => {
114-
const { runner, browserStubs } = await createTestRunner();
89+
const { runner, browser } = await createTestRunner();
11590
let resolveStopped: (passed: boolean) => void;
11691
const stopped = new Promise<boolean>(resolve => {
11792
resolveStopped = resolve;
@@ -130,13 +105,13 @@ describe('TestRunner', function () {
130105

131106
const passed = await stopped;
132107

133-
expect(browserStubs.stopSession.callCount).to.equal(1, 'browser session is stopped');
134-
expect(browserStubs.stop.callCount).to.equal(1, 'browser is stopped');
135-
expect(passed).to.equal(true, 'test runner quits with true');
108+
assert.equal(browser.stopSession.mock.callCount(), 1, 'browser session is stopped');
109+
assert.equal(browser.stop.mock.callCount(), 1, 'browser is stopped');
110+
assert.equal(passed, true, 'test runner quits with true');
136111
});
137112

138113
it('closes test runner for a failed test', async () => {
139-
const { runner, browserStubs } = await createTestRunner();
114+
const { runner, browser } = await createTestRunner();
140115
let resolveStopped: (passed: boolean) => void;
141116
const stopped = new Promise<boolean>(resolve => {
142117
resolveStopped = resolve;
@@ -154,28 +129,28 @@ describe('TestRunner', function () {
154129
runner.sessions.updateStatus({ ...sessions[0], passed: false }, SESSION_STATUS.TEST_FINISHED);
155130
const passed = await stopped;
156131

157-
expect(browserStubs.stopSession.callCount).to.equal(1, 'browser session is stopped');
158-
expect(browserStubs.stop.callCount).to.equal(1, 'browser is stopped');
159-
expect(passed).to.equal(false, 'test runner quits with false');
132+
assert.equal(browser.stopSession.mock.callCount(), 1, 'browser session is stopped');
133+
assert.equal(browser.stop.mock.callCount(), 1, 'browser is stopped');
134+
assert.equal(passed, false, 'test runner quits with false');
160135
});
161136

162137
describe('groups', () => {
163138
it('can create a group in addition to the default group', async () => {
164139
const { runner } = await createTestRunner(undefined, [
165140
{
166141
name: 'a',
167-
files: [path.join(__dirname, '..', '..', 'fixtures', 'group-a', '*.test.js')],
142+
files: [path.join(import.meta.dirname, '..', '..', 'fixtures', 'group-a', '*.test.js')],
168143
},
169144
]);
170145

171146
const sessions = Array.from(runner.sessions.all());
172-
expect(sessions.length).to.equal(3);
173-
expect(sessions.filter(s => s.group.name === 'default').length).to.equal(1);
174-
expect(sessions.filter(s => s.group.name === 'a').length).to.equal(2);
147+
assert.equal(sessions.length, 3);
148+
assert.equal(sessions.filter(s => s.group.name === 'default').length, 1);
149+
assert.equal(sessions.filter(s => s.group.name === 'a').length, 2);
175150
});
176151

177152
it('can create a group with a custom browser, inheriting test files', async () => {
178-
const [, groupBrowser] = createBrowserStub();
153+
const groupBrowser = createBrowserStub();
179154
const { browser, runner } = await createTestRunner(undefined, [
180155
{
181156
name: 'a',
@@ -184,15 +159,15 @@ describe('TestRunner', function () {
184159
]);
185160

186161
const sessions = Array.from(runner.sessions.all());
187-
expect(sessions.length).to.equal(2);
188-
expect(sessions.filter(s => s.group.name === 'default').length).to.equal(1);
189-
expect(sessions.filter(s => s.group.name === 'a').length).to.equal(1);
162+
assert.equal(sessions.length, 2);
163+
assert.equal(sessions.filter(s => s.group.name === 'default').length, 1);
164+
assert.equal(sessions.filter(s => s.group.name === 'a').length, 1);
190165

191166
const sessionDefault = sessions.find(s => s.group.name === 'default')!;
192167
const sessionA = sessions.find(s => s.group.name === 'a')!;
193-
expect(sessionDefault.testFile).to.equal(sessionA.testFile);
194-
expect(sessionDefault.browser).to.equal(browser);
195-
expect(sessionA.browser).to.equal(groupBrowser);
168+
assert.equal(sessionDefault.testFile, sessionA.testFile);
169+
assert.equal(sessionDefault.browser, browser);
170+
assert.equal(sessionA.browser, groupBrowser);
196171
});
197172

198173
it('can create test groups inheriting browser', async () => {
@@ -203,49 +178,53 @@ describe('TestRunner', function () {
203178
[
204179
{
205180
name: 'a',
206-
files: [path.join(__dirname, '..', '..', 'fixtures', 'group-a', '*.test.js')],
181+
files: [path.join(import.meta.dirname, '..', '..', 'fixtures', 'group-a', '*.test.js')],
207182
},
208183
{
209184
name: 'b',
210-
files: [path.join(__dirname, '..', '..', 'fixtures', 'group-b', '*.test.js')],
185+
files: [path.join(import.meta.dirname, '..', '..', 'fixtures', 'group-b', '*.test.js')],
211186
},
212187
{
213188
name: 'c',
214-
files: [path.join(__dirname, '..', '..', 'fixtures', 'group-c', '*.test.js')],
189+
files: [path.join(import.meta.dirname, '..', '..', 'fixtures', 'group-c', '*.test.js')],
215190
},
216191
],
217192
);
218193

219194
const sessions = Array.from(runner.sessions.all());
220-
expect(sessions.length).to.equal(6);
221-
expect(sessions.filter(s => s.group.name === 'a').length).to.equal(2);
222-
expect(sessions.filter(s => s.group.name === 'b').length).to.equal(2);
223-
expect(sessions.filter(s => s.group.name === 'c').length).to.equal(2);
195+
assert.equal(sessions.length, 6);
196+
assert.equal(sessions.filter(s => s.group.name === 'a').length, 2);
197+
assert.equal(sessions.filter(s => s.group.name === 'b').length, 2);
198+
assert.equal(sessions.filter(s => s.group.name === 'c').length, 2);
224199
});
225200

226201
it('can create test groups with custom browsers', async () => {
227-
const [, browserB] = createBrowserStub();
202+
const browserB = createBrowserStub();
228203
const { browser, runner } = await createTestRunner(
229204
{
230205
files: undefined,
231206
},
232207
[
233208
{
234209
name: 'a',
235-
files: [path.join(__dirname, '..', '..', 'fixtures', 'group-a', 'a-1.test.js')],
210+
files: [
211+
path.join(import.meta.dirname, '..', '..', 'fixtures', 'group-a', 'a-1.test.js'),
212+
],
236213
},
237214
{
238215
name: 'b',
239216
browsers: [browserB],
240-
files: [path.join(__dirname, '..', '..', 'fixtures', 'group-b', 'b-1.test.js')],
217+
files: [
218+
path.join(import.meta.dirname, '..', '..', 'fixtures', 'group-b', 'b-1.test.js'),
219+
],
241220
},
242221
],
243222
);
244223

245224
const sessions = Array.from(runner.sessions.all());
246-
expect(sessions.length).to.equal(2);
247-
expect(sessions.find(s => s.group.name === 'a')!.browser).to.equal(browser);
248-
expect(sessions.find(s => s.group.name === 'b')!.browser).to.equal(browserB);
225+
assert.equal(sessions.length, 2);
226+
assert.equal(sessions.find(s => s.group.name === 'a')!.browser, browser);
227+
assert.equal(sessions.find(s => s.group.name === 'b')!.browser, browserB);
249228
});
250229

251230
it('can ignore files via string[] globs', async () => {
@@ -255,8 +234,9 @@ describe('TestRunner', function () {
255234
});
256235

257236
const sessions = Array.from(runner.sessions.all());
258-
const allFiles = sessions.flatMap(x => path.relative(__dirname, x.testFile));
259-
expect(allFiles).to.deep.equal(
237+
const allFiles = sessions.flatMap(x => path.relative(import.meta.dirname, x.testFile));
238+
assert.deepEqual(
239+
allFiles,
260240
[
261241
'../../fixtures/a.test.js',
262242
'../../fixtures/group-a/a-1.test.js',

0 commit comments

Comments
 (0)