使用Ember 1.6.1和Ember-Data 1.0.0-beta6,同时探索ember-test。我遇到了一个意外运行而没有问题的场景,我正在寻找一些清晰的原因。
测试来源:
test_init.js
/* Other setup... */
App.setupForTesting();
App.injectTestHelpers();
tests.js
test("Visiting route should pull in correct model data", function(){
/* Mock ajax response with fixture json data containing map:1, place:1, place:2 */
visit("/maps/1");
andThen(function(){
var mapRoute = getMapRoute(); // Helper that retrieves from App.__container__
mapRoute.store.find("map", mapId).then(function(map){
equal(map.get("id"), 1);
});
mapRoute.store.find("place", 1).then(function(place){
equal(place.get("id"), 1);
});
mapRoute.store.find("place", 2).then(function(place){
equal(place.get("id"), 2);
});
});
});
引用Unit Test Helpers页面:
setupForTesting()函数调用使ember自动关闭 运行循环执行。这使我们有能力控制流量 在某种程度上,运行循环我们自己。它的默认行为 解决所有承诺并完成所有异步行为 暂停,让你有机会建立状态和断言 一个已知的州。
App.setupForTesting();
鉴于通过调用setupForTesting()禁用了自动运行循环,我原本希望必须通过在store.find
中包含Ember.run
调用来显式创建一个,因为承诺解析是作为一部分发生的一个runloop的动作队列。但是,这个测试通过就好了。
这里有隐含的runloop吗?如果是这样,何时合法地需要Ember.run
包装器(例如Ember API外部的异步回调)?