使用quint测试ember夹具数据

时间:2013-09-12 15:37:05

标签: ember.js ember-data qunit

我们如何使用quint测试用灯具测试余烬数据? 以下是我的测试代码的样子:

/*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');
});

当我记录数据时,它返回一个promise。但是,如何测试返回的记录数或检查数据?

谢谢, DEE

2 个答案:

答案 0 :(得分:2)

store.find执行异步加载,甚至夹具中的数据也在内存中。该aproach用于模拟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');                
    });        
  });
}); 

答案 1 :(得分:0)

尝试

data = store.find('analyticsRun',1);
data.on('didLoad', function() {
    console.log(data.get('length')); //should output number of recs returned
});