Skip to content

Commit b866755

Browse files
pmarchinitargos
authored andcommitted
test: test runner run plan
PR-URL: #57304 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
1 parent 77668ff commit b866755

12 files changed

Lines changed: 295 additions & 0 deletions
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
importtestfrom'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+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
importtestfrom'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+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
importtestfrom'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+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
importtestfrom'node:test';
2+
3+
test('deeply nested tests',async(t)=>{
4+
t.plan(1);
5+
6+
awaitt.test('level 1',async(t)=>{
7+
t.plan(1);
8+
9+
awaitt.test('level 2',(t)=>{
10+
t.plan(1);
11+
t.assert.ok(true,'deepest assertion');
12+
});
13+
});
14+
});
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
importtestfrom'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+
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
importtestfrom'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+
constexpected=['a','b','c'];
11+
t.plan(expected.length);
12+
conststream=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+
});
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
importtestfrom'node:test';
2+
3+
test('parent test',async(t)=>{
4+
t.plan(1);
5+
awaitt.test('child test',(t)=>{
6+
t.plan(1);
7+
t.assert.ok(true,'child assertion');
8+
});
9+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
importtestfrom'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+
});
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
importtestfrom'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+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
importtestfrom'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+
});

0 commit comments

Comments
 (0)