3

我们如何使用 quint 测试使用夹具测试 ember 数据?这是我的测试代码的样子:

/*globals App, getFoodController*/

module('Analytics Unit Test: AnalyticsConfig Controller', {
  setup: function () {

      AS.Store = DS.Store.extend({
          adapter: DS.FixtureAdapter.create({ simulateRemoteResponse: false })
      });

      AS.AnalyticsRun.FIXTURES = [{
          id: 1,
          analyticsPlan: "Jane Q. Public",
          commandScript: "some script",
          analyticsRunParameters: []
      }];
  }
});

test('Check controller is initialized',function(){
    var controller = getAnalyticsConfigController();
    ok(controller, 'AnalyticsConfig controller is ok');
});


test('Check data',function(){
    var controller = getAnalyticsConfigController();
    var store = controller.get('store');
    var data;
    Ember.run(function () {
        data = store.find('analyticsRun',1);
        console.log(data);
    });
    equal(data.length, 1, 'Check data');
});

当我记录数据时,它会返回一个承诺。但是如何测试返回了多少条记录或检查数据?

谢谢,迪

4

2 回答 2

2

执行store.find异步加载,即使夹具中的数据在内存中。该方法用于模拟 ajax 请求。所以你需要使用then方法知道数据何时加载。

要在 qunit 中测试异步行为,您需要使用asyncTest

更新您的示例,提供以下代码:

asyncTest('Check data', 1, function() {
    var controller = getAnalyticsConfigController();
    var store = controller.get('store');
    Ember.run(function () {
        store.find('analyticsRun',1).then(function(data) {
            equal(data.get('length'), 1, 'Analytcs with id 1 found');
            start();
        });
    });
});

我希望它有帮助

更新

现在我意识到你使用simulateRemoteResponse: false了所以不需要使用 asyncTest。但是then仍然需要该方法,因为您可以在其中检索获取的模型:

test('Check data', function() {
  var controller = AS.__container__.lookup('controller:analyticsConfig');
  var store = controller.get('store');
  Ember.run(function () {
    store.find('analyticsRun',1).then(function(analyticsRun) {                
      equal(analyticsRun.get('analyticsPlan'), 'Test', 'Analytics with id 1 found');                
    });        
  });
}); 
于 2013-09-12T16:38:20.373 回答
0

尝试

data = store.find('analyticsRun',1);
data.on('didLoad', function() {
    console.log(data.get('length')); //should output number of recs returned
});
于 2013-09-12T16:21:45.887 回答