簡體   English   中英

如何更改 jasmine-node 異步規范的超時時間

[英]How do I change the timeout on a jasmine-node async spec

如何在不訴諸運行/等待塊的情況下通過此測試?

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

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

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

         done();
     });
});

您可以(現在)根據Jasmine 文檔直接在規范中設置它。

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;
    });
});

已發送此功能的拉取請求( 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

要設置全局 Jasmine-Node 超時,請執行以下操作:

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

感謝開發人員 Gabe Hicks 通過調試找出 .getEnv() 部分,盡管 自述文件中的錯誤信息聲稱它是通過設置 jasmine.DEFAULT_TIMEOUT_INTERVAL 完成的。

如果您只想為一個 it() 設置自定義超時,您可以嘗試將超時(毫秒)作為第三個參數(在字符串語句和函數之后)傳遞。 還有的是正在做的例子在這里,但我不知道如果自定義超時比茉莉花的默認不再會發生什么。 我預計它會失敗。

看起來您現在可以將其添加為it函數的最后一個參數:

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

在 Angular 中,把它放在你的 describe 塊之外:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

這適用於 .spec.ts 文件中的所有測試

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

把它放在describe語句之后:

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

在我的情況下,我有多個測試用例,而我在使用上述解決方案時正在使用:

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

DEFAULT_TIMEOUT_INTERVAL 在第一個測試用例中沒有更新,所以我不得不添加:

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

到我的代碼以成功運行所有測試。

要對所有測試(在 e2e 或集成測試的情況下)全局執行此操作,您可以使用幫助程序。

正確配置的幫助文件應在執行測試之前加載,並允許您全局更改 DEFAULT_TIMEOUT_INTERVAL:

規格/支持/茉莉花.json

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

助手/超時.ts

jasmine.DEFAULT_TIMEOUT_INTERVAL = 300000;

為什么不通過監視setTimeout()

就像是:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM