Jasmine 2.0:重构1.3的运行()和waitsFor()

时间:2014-01-07 02:42:33

标签: javascript jasmine

最近发布的Jasmine 2.0从Async Jasmine 1.3中删除了waits functionsruns()

我有旧的1.3测试我想转换到新的风格。

对于等待,在大多数情况下,您似乎可以仔细编写beforeEach()afterEach()以获得相同的效果。

重现简单执行包含函数的runs()的最佳方法是什么?

我的第一次尝试:

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

变为

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

2 个答案:

答案 0 :(得分:30)

可以在it()块中使用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);

});

但是,我发现这大大减慢了我的测试套件,所以我创建了自己的扩展,重新创建了waitsFor提供的轮询功能。

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

答案 1 :(得分:22)

在jasmine 1.3和之前的版本中,runswaits / 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转而使用donebeforeEachit的{​​{1}}回调,如果他们执行了您需要等待的异步操作。

afterEach