无限的茉莉花超时

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)

请参阅此处的工作示例