ale*_*cxe 17 javascript testing jasmine protractor
这基本上是对单个jasmine规范 github问题的删除超时的后续行动.
问题:
是否可以使单个测试永不超时?
问题:
可以通过DEFAULT_TIMEOUT_INTERVAL或使用beforeEach/ afterEach或在单个it()块上为每个描述全局设置超时值:
it('Has a custom timeout', function() {
expect(true).toBeTruthy();
}, value in msec)
Run Code Online (Sandbox Code Playgroud)
我有兴趣让一个规格永远不会超时.我试图遵循上述github问题中提出的建议并使用Infinity:
it('Has a custom timeout', function() {
expect(true).toBeTruthy();
}, Infinity)
Run Code Online (Sandbox Code Playgroud)
但是,在测试进入it()块之后,我立即遇到以下错误:
错误:超时 - 在jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时内未调用异步回调
我想我不能Infinity用作超时值,或者我做错了什么.
作为一种解决方法,我可以使用硬编码的大数字,但我想避免这种情况.
Mic*_*nov 15
Jasmine内部使用setTimeout等待规格在指定的时间段内完成.
根据这个Q/A - 为什么setTimeout()"中断"大毫秒延迟值?:
setTimeout使用32位int来存储延迟
...
超时值太大而不适合签名的32位整数可能会导致FF,Safari和Chrome出现溢出,从而导致超时被立即调度.更简单的是不安排这些超时,因为24.8天超出浏览器保持开放的合理期望.
只要Infinity大于任何其他数字,就会发生溢出.
在这种情况下,最大安全整数是2 31 -1 = 2147483647.这个值是有限的,因此测试实际上不会无限长地运行,但正如我所说的那样24.8天足够长.
您可以定义一个常量来存储此值:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000;
var MAX_SAFE_TIMEOUT = Math.pow(2, 31) - 1;
describe('suite', function () {
it('should work infinitely long', function (done) {
setTimeout(function () {
expect(true).toBe(true);
done();
}, 3000)
}, MAX_SAFE_TIMEOUT);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3206 次 |
| 最近记录: |