-
-
Couldn't load subscription status.
- Fork 33.6k
Closed
Labels
test_runnerIssues and PRs related to the test runner subsystem.Issues and PRs related to the test runner subsystem.
Description
Version
main
Platform
Linux s7 5.15.0-69-generic #76-Ubuntu SMP Fri Mar 17 17:19:29 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Subsystem
test
What steps will reproduce the bug?
When a mocked setInterval timer is triggered, the timers runAt time is updated for the next time it should run here. However , the increment is actually always 1, since the boolean flag isInterval is stored in the timer here
Pull request incoming.
test("setInterval uses the wrong interval", async (t) => {
t.mock.timers.enable({ apis: ["setInterval"] });
const fn = t.mock.fn();
setInterval(fn, 1000);
assert.strictEqual(fn.mock.callCount(), 0);
t.mock.timers.tick(1000);
assert.strictEqual(fn.mock.callCount(), 1);
for (let i = 0; i < 999; ++i) {
t.mock.timers.tick(1);
}
assert.strictEqual(fn.mock.callCount(), 1);
});fails with:
❯ ~/src/libs/node/node index.mjs
﹣ aborting setTimeout clears wrong timer (2.795504ms) # SKIP
﹣ aborting setTimeout after timer is already triggered clear wrong timer (0.20311ms) # SKIP
✖ setInterval uses the wrong interval (24.795796ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
1000 !== 1
at TestContext.<anonymous> (file:///home/mfischer/src/tests/node-mock-timers/index.mjs:72:10)
at Test.runInAsyncScope (node:async_hooks:206:9)
at Test.run (node:internal/test_runner/test:631:25)
at Test.processPendingSubtests (node:internal/test_runner/test:374:18)
at Test.postRun (node:internal/test_runner/test:715:19)
at Test.run (node:internal/test_runner/test:673:12)
at async Test.processPendingSubtests (node:internal/test_runner/test:374:7) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: 1000,
expected: 1,
operator: 'strictEqual'
}
How often does it reproduce? Is there a required condition?
Always
What is the expected behavior? Why is that the expected behavior?
setInterval should use the correct interval
What do you see instead?
setInverval always uses interval 1 after first time
Additional information
No response
Metadata
Metadata
Assignees
Labels
test_runnerIssues and PRs related to the test runner subsystem.Issues and PRs related to the test runner subsystem.