◐ Shell
clean mode source ↗

test: test runner run plan · nodejs/node@b866755

File tree

    • fixtures/test-runner/plan

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,7 @@

1+

import test from 'node:test';

2+
3+

test('less assertions than planned', (t) => {

4+

t.plan(2);

5+

t.assert.ok(true, 'only one assertion');

6+

// Missing second assertion

7+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,7 @@

1+

import test from 'node:test';

2+
3+

test('matching assertions', (t) => {

4+

t.plan(2);

5+

t.assert.ok(true, 'first assertion');

6+

t.assert.ok(true, 'second assertion');

7+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,7 @@

1+

import test from 'node:test';

2+
3+

test('more assertions than planned', (t) => {

4+

t.plan(1);

5+

t.assert.ok(true, 'first assertion');

6+

t.assert.ok(true, 'extra assertion'); // This should cause failure

7+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,14 @@

1+

import test from 'node:test';

2+
3+

test('deeply nested tests', async (t) => {

4+

t.plan(1);

5+
6+

await t.test('level 1', async (t) => {

7+

t.plan(1);

8+
9+

await t.test('level 2', (t) => {

10+

t.plan(1);

11+

t.assert.ok(true, 'deepest assertion');

12+

});

13+

});

14+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,9 @@

1+

import test from 'node:test';

2+
3+

test('failing planning by options', { plan: 1 }, () => {

4+

// Should fail - no assertions

5+

});

6+
7+

test('passing planning by options', { plan: 1 }, (t) => {

8+

t.assert.ok(true);

9+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,20 @@

1+

import test from 'node:test';

2+

import { Readable } from 'node:stream';

3+
4+

test('planning with streams', (t, done) => {

5+

function* generate() {

6+

yield 'a';

7+

yield 'b';

8+

yield 'c';

9+

}

10+

const expected = ['a', 'b', 'c'];

11+

t.plan(expected.length);

12+

const stream = Readable.from(generate());

13+

stream.on('data', (chunk) => {

14+

t.assert.strictEqual(chunk, expected.shift());

15+

});

16+
17+

stream.on('end', () => {

18+

done();

19+

});

20+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,9 @@

1+

import test from 'node:test';

2+
3+

test('parent test', async (t) => {

4+

t.plan(1);

5+

await t.test('child test', (t) => {

6+

t.plan(1);

7+

t.assert.ok(true, 'child assertion');

8+

});

9+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,15 @@

1+

import test from 'node:test';

2+
3+

test('planning with wait should PASS within timeout', async (t) => {

4+

t.plan(1, { wait: 5000 });

5+

setTimeout(() => {

6+

t.assert.ok(true);

7+

}, 250);

8+

});

9+
10+

test('planning with wait should FAIL within timeout', async (t) => {

11+

t.plan(1, { wait: 5000 });

12+

setTimeout(() => {

13+

t.assert.ok(false);

14+

}, 250);

15+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,8 @@

1+

import test from 'node:test';

2+
3+

test('planning should FAIL when wait time expires before plan is met', (t) => {

4+

t.plan(2, { wait: 500 });

5+

setTimeout(() => {

6+

t.assert.ok(true);

7+

}, 30_000).unref();

8+

});

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,11 @@

1+

import test from 'node:test';

2+
3+

test('should not wait for assertions and fail immediately', async (t) => {

4+

t.plan(1, { wait: false });

5+
6+

// Set up an async operation that won't complete before the test finishes

7+

// Since wait:false, the test should fail immediately without waiting

8+

setTimeout(() => {

9+

t.assert.ok(true);

10+

}, 1000).unref();

11+

});