如何更改jasmine-node异步规范的超时

时间:2012-03-26 06:32:27

标签: node.js jasmine

如何在不使用runs / waitsFor块的情况下通过此测试?

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

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

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

         done();
     });
});

11 个答案:

答案 0 :(得分:82)

您可以(现在)根据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;
    });
});

答案 1 :(得分:64)

已发送此功能的提取请求(https://github.com/mhevery/jasmine-node/pull/142

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

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

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

     done();
  });

}, 5000); // set timeout to 5 seconds

答案 2 :(得分:42)

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

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

感谢开发人员Gabe Hicks通过调试找出.getEnv()部分,尽管README doc中的错误信息声称通过设置jasmine.DEFAULT_TIMEOUT_INTERVAL来完成。

如果你想为一个it()设置一个自定义超时,你可以尝试传递超时(毫秒)作为第三个参数(在字符串语句和函数之后)。已经完成了here的示例,但我不确定如果自定义超时超过Jasmine的默认值会发生什么。我希望它会失败。

答案 3 :(得分:18)

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

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

答案 4 :(得分:2)

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

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

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

答案 5 :(得分:1)

为什么不通过监视setTimeout()

类似的东西:

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

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

答案 6 :(得分:0)

在帮助文件上添加:jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;为我工作。

答案 7 :(得分:0)

将其放在describe语句之后:

enter image description here

答案 8 :(得分:0)

在我的情况下,我有多个测试用例,而在使用上述解决方案时,我使用的是:

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

在第一个测试用例中,DEFAULT_TIMEOUT_INTERVAL并未更新,因此我必须添加它:

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

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

答案 9 :(得分:0)

要为您的所有测试(在 e2e 或集成测试的情况下)全局执行此操作,您可以使用帮助程序。

正确配置的帮助文件应在执行测试之前加载,并允许您全局更改 DEFAULT_TIMEOUT_INTERVAL:

spec/support/jasmine.json

{
    ...
    "helpers": [
        "/path/to/helpers/**/*.ts"
    ]
}

helpers/timeout.ts

jasmine.DEFAULT_TIMEOUT_INTERVAL = 300000;

答案 10 :(得分:-12)

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