Как изменить тайм-аут на асинхронной спецификации jasmine-node


Как я могу пройти этот тест, не прибегая к блокам runs / waitsFor?

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

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

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

         done();
     });
});
8 62

8 ответов:

вы можете (теперь) установить его непосредственно в спецификации, согласно 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;
    });
});

отправлен запрос на вытягивание для этой функции (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

кредит разработчику Гейб Хикс для выяснения .getEnv () часть через отладку, несмотря на дезинформацию в дополнительные сведения который утверждает, что это сделано путем установки Жасмин.DEFAULT_TIMEOUT_INTERVAL.

Если вы хотите установить пользовательский тайм-аут только для одного it(), вы можете попробовать передать тайм-аут (миллисекунды) в качестве третьего аргумента (после строкового оператора и функции). Есть пример того, что делается здесь, но я не уверен, что произойдет, если пользовательский тайм-аут будет больше, чем по умолчанию Jasmine. Я ожидаю, что он потерпит неудачу.

похоже, теперь вы можете добавить его в качестве последнего аргумента для it функция:

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

почему бы не шпионить за setTimeout()?

что-то типа:

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

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

добавляем: jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime; на вспомогательный файл работал для меня.

в Angular, поместите это за пределами вашего блока описания:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Это относится ко всем тестам в системе .спекуляция.файл TS

изменить j$.DEFAULT_TIMEOUT_INTERVAL до 10000 в следующем файле: npm\node_modules\jasmine-core\lib\jasmine-core