将服务注入到Ember2.3+中



由于getOwner()已添加到Ember中,当我尝试检查注入Mixin的服务时,我的单元测试套件中弹出了一个错误,我遇到了一个问题(此处为弃用指南)。

这是我的混音:

import Ember from 'ember';
export default Ember.Mixin.create({
    sha: Ember.inject.service('sha512'),
});

这是我的基本单元测试,在由ember cli:生成后略有更改

import Ember from 'ember';
import DirtyRelationshipsDetectorMixin from 'xamoom-customer/mixins/dirty-relationships-detector';
import { module, test } from 'qunit';
module('Unit | Mixin | dirty relationships detector');
test('it works', function(assert) {
  let DirtyRelationshipsDetectorObject = Ember.Object.extend(DirtyRelationshipsDetectorMixin);
  let subject = DirtyRelationshipsDetectorObject.create();
  assert.ok(subject);
  assert.ok(subject.get('sha')); // problem occurs here
});

我得到的错误信息很清楚,但我还没有找到解决方案:

错误:断言失败:正在尝试查找上的注入属性没有容器的对象,请确保该对象已实例化通过容器。

当应用程序运行时,服务就在那里,只是测试失败了。Ember 2.5.1-Ember CLI 2.5.0

如果使用Ember.getOwner(target),则不仅可以将.create()作为目标,还可以注入所有者。用CCD_ 4。所有者通常是应用程序实例。

编辑:

当您使用Ember.inject时,实际上您正在使用getOwner。这就像是一条捷径:

sha: Ember.computed({
  get() {
    return Ember.getOwner(this).lookup('service:sha');
  }
})

相关内容

  • 没有找到相关文章

最新更新