承诺解析不需要明确的Ember.run包装器?

时间:2014-11-05 18:48:29

标签: javascript unit-testing ember.js ember-data

使用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外部的异步回调)?

0 个答案:

没有答案