最近发布的Jasmine 2.0从Async Jasmine 1.3中删除了waits functions和runs()
。
我有旧的1.3测试我想转换到新的风格。
对于等待,在大多数情况下,您似乎可以仔细编写beforeEach()
和afterEach()
以获得相同的效果。
重现简单执行包含函数的runs()
的最佳方法是什么?
我的第一次尝试:
runs(function() {
expect(true).toBe(true);
}
变为
(function() {
expect(true).toBe(true);
})()
答案 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提供的轮询功能。
答案 1 :(得分:22)
在jasmine 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
的{{1}}回调,如果他们执行了您需要等待的异步操作。
afterEach