Як змінити час очікування на специфікації асинхронізації жасминового вузла


88

Як я можу пройти цей тест, не вдаючись до запусків / очікувань на блоки?

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

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

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

         done();
     });
});

Відповіді:


104

Ви можете (зараз) встановити його безпосередньо в специфікації, згідно з документами про жасмин .

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, у мене були проблеми із запуском тестів з хмарним, і цей маленький фрагмент прийшов мені на допомогу.
Dev


43

Щоб встановити глобальний час очікування Jasmine-Node, виконайте такі дії:

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

Заслуга розробника Гейба Хікса за з’ясування частини .getEnv () шляхом налагодження, незважаючи на дезінформацію в документі README який стверджує, що це зроблено шляхом встановлення жасмину.DEFAULT_TIMEOUT_INTERVAL.

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


28
Оновлення для тих, хто натрапляє на цю відповідь у 2014 році: для Jasmine 2 налаштування jasmine.DEFAULT_TIMEOUT_INTERVAL працює.
Саймон Гріневольт

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 поставте це поза блоком опису:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Це стосується всіх тестів у файлі .spec.ts




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 викликає зовнішню службу, яка часто працює повільно.
Брайан Лоу

це чудово, це дозволяє перевірити тайм-аут, не змушуючи тест чекати фактичного тайм-ауту
Гійом

таким чином ми не вправляємося з плином часу і не викликаємо fn відразу, тоді як оригінал ніколи не називає його до наступного циклу.
Андре Верланг,

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.