使用JasmineJS测试Ember Data 1.0.0

时间:2013-10-24 22:57:55

标签: ember.js ember-data jasmine

总的来说,我正试图用茉莉花来测试我的余烬模型。在Ember Data 1.0.0 we no longer have App.Model.findApp.Model.createRecord。相反,我们有this.get('store').findthis.get('store').createRecord('model', {})

如何在测试中获得商店的处理权?

注射商店

我调查了injecting it,但没有运气。

Encompass.inject(this,'store','store');

我认为这是因为我注入this的对象不是正确的类型。

创建商店

我也尝试在本地创建商店:

describe("A Folder", function() {
  var store = null;
  var folder = null;
  beforeEach(function(){
    Encompass.Store = DS.Store.extend({
      adapter: Encompass.ApplicationAdapter
    });
    store = Encompass.Store.create();
  });

但在

中使用商店
store.find('folder');

结果为TypeError: Cannot call method 'lookupFactory' of undefined

我认为这是因为容器不存在(及时?)

2 个答案:

答案 0 :(得分:4)

您的商店正在尝试访问容器,但它不存在。您需要手动创建。对于每个测试的模型,您需要使用以下方式在商店注册:

container.register('model:folder', Encompass.Folder);

您更新的测试如下:

describe("A Folder", function() {
  var store = null;
  var folder = null;
  beforeEach(function(){
    Encompass.Store = DS.Store.extend({
      adapter: Encompass.ApplicationAdapter
    });
    var container = new Ember.Container();
    container.register('model:folder', Encompass.Folder);
    store = Encompass.Store.create({
      container: container 
    });
  });
});

答案 1 :(得分:2)

如果您想要应用程序的商店,您可以从容器中查找它。这在测试中很好,但是在生产中不敢这样做:)

var store = App.__container__.lookup('store:main');