在 ember-cli 中测试扩展核心 ember 对象

Testing extended core ember objects in ember-cli

我创建了一个 ember-cli 应用程序,我需要在其中扩展 ember-data 的默认存储。为此,我在 app/store.js 创建了一个文件,并简单地扩展了商店:

export default DS.Store.extend({
  findOrCreateRecord: function(type, properties, preload) {
    ...
  }
});

这很好用,但是当我开始测试使用这种新方法的初始化程序时,出现以下错误:

'undefined' is not a function (evaluating 'store.findOrCreateRecord()') 我需要做些什么才能让我的测试在这里正常运行吗?我正在测试的文件是下面的初始化程序:

export function initialize(container, app) {
  var store = container.lookup('store:main');
  app.deferReadiness();

  store.findOrCreateRecord('order', basketToken).then(function(basket) {
    container.register('basket:main', basket, { instantiate: false });
    app.inject('controller:basket', 'model', 'basket:main');
    app.advanceReadiness();
  });
}

至于测试文件本身,它是 ember-cli 生成的默认文件,完全没有修改

由于在 ember 1.12 中引入了 ember 实例初始值设定项,我的问题中的初始值设定项将不再随着 ember 的发展向前推进,因为调用 lookup在容器上已弃用。同样根据@tomdale,我使用 deferReadiness/advanceReadiness 是一种在初始化程序中提供同步性的 hacky 方式,因此不鼓励使用。建议改用应用路由来实现该功能

这个解释的很好on GitHub

此外,在 ember-data 的更新版本中,商店已移至服务中。因此我的自定义商店必须移动到我的 ember-cli 项目的 services 文件夹中。因此,现在使用与 ember-cli

捆绑的测试套件进行测试变得微不足道