Подтвердить что ты не робот

Жасмин 2.0: рефакторинг 1.3 прогонов() и ожидания для()

Недавно выпущенный Jasmine 2.0 удаляет функции ожидания и runs() из Async Jasmine 1.3.

У меня есть старые 1.3 теста, которые я хотел бы перейти к новому стилю.

Для ожиданий в большинстве случаев кажется, что вы можете писать beforeEach() и afterEach() тщательно для того же эффекта.

Каков наилучший способ воспроизведения runs(), который просто выполняет последовательно выполняемые функции?

Моя первая попытка:

runs(function() {
  expect(true).toBe(true);
}

становится

(function() {
  expect(true).toBe(true);
})()
4b9b3361

Ответ 1

В вашем блоке() можно использовать setTimeout.

it("is asynchronous", function(done) {
  var isItDone = false;
  $.ajax('/some/url').success(function() { isItDone = true; });

  setTimeout(function(){
    expect(isItDone).toBeTrue();
    done(); // call this to finish off the it block
  }, 500);

});

Тем не менее, я обнаружил, что это значительно замедлило мой тестовый набор, поэтому я создал собственное расширение, которое воссоздает функциональность опроса, которая ждет. При условии.

https://gist.github.com/abreckner/110e28897d42126a3bb9

Ответ 2

В жасмине 1.3 и предыдущем, runs и waits/waitsFor должны были быть необходимы, только если у вас был асинхронный код, который вам нужно было дождаться, пока он не будет выполнен до выполнения следующей части теста. В этом случае у вас будет что-то вроде:

it("is asynchronous", function() {
    var isItDone = false;
    runs(function() {
        $.ajax('/some/url').success(function() { isItDone = true; });
    });

    waitsFor(function() {
        return isItDone;
    });

    runs(function() {
        // this won't run until the waitsFor returns true
    });
});

Jasmine 2.0 перешел на использование обратного вызова done для beforeEach, it и afterEach, если они делают что-то асинхронное, что вам нужно ждать.

beforeEach(function(done) {
    $.ajax('/some/url').success(done);
});

it("is asynchronous", function() {
    // this won't run until the done callback is invoked from the beforeEach
});