node.js - 对 Jest 测试设置时间限制?

标签 node.js npm jestjs

我正在使用 Jest 运行一组测试,以使用两种不同的斐波纳契方法来演示 Big O。

const fastFib = require('./../fastFib');
const slowFib = require('./../slowFib');

test('Fast way of getting Fibonacci of 44', () => {
  expect(fastFib(44)).toBe(701408733);
});

test('Slow way of getting Fibonacci of 44', () => {
  expect(slowFib(44)).toBe(701408733);
});

我想知道是否有办法指定测试的最大长度?我看到您可以为异步超时传递第三个变量,但它似乎对正常功能没有任何影响:
test('Slow way of getting Fibonacci of 44', () => {
  expect(slowFib(44)).toBe(701408733);
}, 5000);

有没有办法可以使用 Jest 指定函数的最大执行时间?

我会分享slowFib.js以供引用:
function fib(n) {
  return (n<=1) ? n : fib(n - 1) + fib(n - 2);
}

module.exports = fib;

最佳答案

所以你的测试因为同步执行而暂停 - 没有办法通过超时中断它。您需要“拆分执行”。下一个版本对我来说失败了:

test('Slow way of getting Fibonacci of 44', (done) => {
  expect(slowFib(44)).toBe(701408733);
  setTimeout(done, 10); // smallest timeout possible to make different macrotask
}, 5000);

PS 我也相信这应该可以通过标记测试来实现 async但还没有想清楚具体如何。

[UPD] 你实际上可以在不使用测试超时的情况下实现你的目标:
test('Slow way of getting Fibonacci of 44', () => {
  const start = new Date();
  expect(slowFib(44)).toBe(701408733);
  expect(new Date() - start).toBeLessThan(5000);
});

关于node.js - 对 Jest 测试设置时间限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56344481/

相关文章:

javascript - 如何找出YouTube上关注者的确切人数?

javascript - 抛出新的类型错误 ('app.use() requires middleware functions' );

npm - 升级npm @> = 4的npm`prepublish`脚本的最佳实践

node.js - 尝试通过 npm 在 NodeJS 中安装 websocket 模块时出错

javascript - 为什么我在 Gitlab CI 中出现 TypeError,但在运行 jest 时在我的机器上却没有?

webpack - 类型错误 : Cannot read property 'render' of undefined in Jest test using ReactDOM

javascript - NodeJS/Express : Reading header, 之前设置,结果未定义

javascript - (0 , _reactRouterDom.useHistory) 不是函数

javascript - 在 node-sass@0.9.6 安装脚本 'node build.js' 失败

unit-testing - Electron + Jest - ipcRenderer 在单元测试中未定义