将服务注入到 mixin Ember2.3+
Injecting service into a mixin Ember2.3+
当我尝试检查 注入 Mixin 的服务时,我的单元测试套件中出现错误,因为已添加 getOwner()
进入 Ember(弃用指南 here)。
这是我的混音:
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
});
我收到的错误消息很清楚,但我还没有找到解决方案:
Error: Assertion Failed: Attempting to lookup an injected property on
an object without a container, ensure that the object was instantiated
via a container.
当应用 运行 时,服务就在那里,只是测试失败了。
Ember 2.5.1 - Ember-CLI 2.5.0
如果您使用 Ember.getOwner(target)
,您不仅可以 .create()
目标,还可以 inject the owner. 和 .create(owner.ownerInjection())
。通常所有者是一个应用程序实例。
编辑:
当你使用Ember.inject
时,你实际上是在使用getOwner
。它就像一个快捷方式:
sha: Ember.computed({
get() {
return Ember.getOwner(this).lookup('service:sha');
}
})
当我尝试检查 注入 Mixin 的服务时,我的单元测试套件中出现错误,因为已添加 getOwner()
进入 Ember(弃用指南 here)。
这是我的混音:
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
});
我收到的错误消息很清楚,但我还没有找到解决方案:
Error: Assertion Failed: Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.
当应用 运行 时,服务就在那里,只是测试失败了。 Ember 2.5.1 - Ember-CLI 2.5.0
如果您使用 Ember.getOwner(target)
,您不仅可以 .create()
目标,还可以 inject the owner. 和 .create(owner.ownerInjection())
。通常所有者是一个应用程序实例。
编辑:
当你使用Ember.inject
时,你实际上是在使用getOwner
。它就像一个快捷方式:
sha: Ember.computed({
get() {
return Ember.getOwner(this).lookup('service:sha');
}
})