Как изменить время ожидания в асинхронной спецификации узла жасмина - PullRequest
68 голосов
/ 26 марта 2012

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

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

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

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

         done();
     });
});

Ответы [ 8 ]

84 голосов
/ 15 декабря 2015

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

Отправлен запрос на извлечение для этой функции (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
42 голосов
/ 13 июня 2013

Чтобы установить глобальное время ожидания Jasmine-Node, сделайте следующее:

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

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

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

18 голосов
/ 13 мая 2015

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

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});
4 голосов
/ 27 сентября 2018

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

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Это относится ко всем тестам в файле .spec.ts

1 голос
/ 26 марта 2012

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

Что-то вроде:

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

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();
0 голосов
/ 10 марта 2018

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

0 голосов
/ 24 мая 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...