如何更改茉莉花节点异步规范上的超时


88

如何不通过run / waitsFor块就可以通过此测试?

it("cannot change timeout", function(done) {

     request("http://localhost:3000/hello", function(error, response, body){

         expect(body).toEqual("hello world");

         done();
     });
});

Answers:


104

您现在可以按照Jasmine docs在规范中直接进行设置。

describe("long asynchronous specs", function() {

    var originalTimeout;

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

    it("takes a long time", function(done) {
        setTimeout(function() {
            done();
        }, 9000);
    });

    afterEach(function() {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });
});

是的,jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;在使用Jasmine + Jest从头开始构建的全新设置上,不断变化的价值对我来说是成功的窍门。它按预期工作。
伊格纳西奥·塞古拉

我同意@willydee,对cloudinary进行了Runnig测试问题,这小片段使我大开眼界。
Dev Yego


43

要设置全局Jasmine-Node超时,请执行以下操作:

jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds

尽管在README文档中有错误信息,但开发人员Gabe Hicks通过调试找出了.getEnv()部分,该声明声称这是通过设置jasmine.DEFAULT_TIMEOUT_INTERVAL完成的。

如果只想为一个it()设置自定义超时,则可以尝试将超时(毫秒)作为第三个参数传递(在字符串语句和函数之后)。还有的是正在做的例子在这里,但我不知道如果自定义超时比茉莉花的默认不再会发生什么。我希望它会失败。


28
2014年在此答案上绊脚石的任何人的更新:对于Jasmine 2设置jasmine.DEFAULT_TIMEOUT_INTERVAL起作用。
Simon Groenewolt 2014年

2
它适用于我使用Jest + Jasmine进行的全新设置。我刚刚添加jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;了一个用于所有测试的全局配置文件,它可以按预期工作。
伊格纳西奥·塞古拉

22

看起来您现在可以将其添加为该it函数的最后一个参数:

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});

11

在Angular中,将其放在您的describe块之外:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

这适用于.spec.ts文件中的所有测试


3

describe声明后加上:

describe("A saves to DB", function() {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;


1

为什么不通过监视 setTimeout()呢?

就像是:

var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
    expect(timeout).toEqual(2500);
    func();
});

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();

1
谢谢。这些是集成测试,node.js正在调用通常很慢的外部服务。
Brian Low

这很出色,它可以测试超时而无需等待测试等待实际的超时
Guillaume16年

以这种方式,我们不会花费时间,而是立即调用fn,而原始人则不会在下一个周期之前调用它。
安德烈Werlang

0

就我而言,我有多个测试案例,而在使用上述解决方案时,我正在使用:

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

DEFAULT_TIMEOUT_INTERVAL在第一个测试用例中未更新,因此我必须添加以下内容:

  beforeAll(() => {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
  })

到我的代码以成功运行所有测试。


-16

在以下文件中将j $ .DEFAULT_TIMEOUT_INTERVAL更改为10000:npm \ node_modules \ jasmine-core \ lib \ jasmine-core


对于每次运行测试都安装库的方案而言,效果不佳。例如:-在云端运行CI。
domino_katrino
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.