Phi*_*ide 5 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);
});
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法指定测试的最大长度?我看到您可以为异步超时传递第三个变量,但它似乎对正常功能没有任何影响:
test('Slow way of getting Fibonacci of 44', () => {
expect(slowFib(44)).toBe(701408733);
}, 5000);
Run Code Online (Sandbox Code Playgroud)
有没有办法可以使用 Jest 指定函数的最大执行时间?
我将分享slowFib.js以供参考:
function fib(n) {
return (n<=1) ? n : fib(n - 1) + fib(n - 2);
}
module.exports = fib;
Run Code Online (Sandbox Code Playgroud)
所以你的测试因为同步执行而暂停 - 没有办法通过超时中断它。您需要“拆分执行”。下一个版本对我来说失败了:
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);
Run Code Online (Sandbox Code Playgroud)
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);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |