我在Node.js中有以下代码。
const timeout = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
我正在尝试通过以下测试来测试此代码:
it("Should wait for given time before resolving", async () => {
const MS = 100;
const start = process.hrtime();
await timeout(MS);
const diff = process.hrtime(start);
expect(((diff[0] * NS_PER_SEC) + diff[1]) / 1000000).to.at.least(MS);
});
问题有时(很少),此测试失败:
Should wait for given time before resolving:
AssertionError: expected 99.595337 to be at least 100
+ expected - actual
-99.595337
+100
很显然,这是Node.js或某些类型的计时问题。如果可以的话,我希望await timeout(MS);
花费比MS
稍长的时间。在任何情况下,我都不希望它花费更少的时间。
导致这种情况发生的JavaScript / Node.js内部是什么?
这发生在运行Node.js版本8.15.1的macOS 10.14.3上。