我的应用中包含constructor(props) {
super(props);
this.onScroll = this.onScroll.bind(this);
}
componentDidMount()
{
window.addEventListener('scroll', this.onScroll);
}
componentWillUnmount()
{
window.removeEventListener('scroll', this.onScroll);
}
onScroll(event)
{
//handle event here
}
和/或Ember.Mixin
的{{1}}很少。我想知道我应该如何对它们进行单元测试?
默认情况下,ember-cli会生成此测试
DS.attr()
但是当我尝试与DS.belongsTo()
进行互动时,我收到了以下错误:
test('it works', function(assert) {
var MyModelObject = Ember.Object.extend(MyModelMixin);
var subject = MyModelObject.create();
assert.ok(subject);
});
这让人感觉到了。最好的方法是什么?我应该在测试中创建DS.attr()
然后在其上应用mixin吗?
谢谢!
答案 0 :(得分:5)
单元测试这样的模型mixin有点棘手,因为它需要访问商店才能创建模型。通常,商店在mixin测试中不可用,因为即使是容器也没有。此外,由于我们只想测试mixin,因此我们不想要真正的模型,因此我们可以为测试创建和注册虚假的主机模型。这是我如何做到的。
首先,拉入'余烬数据'并使用来自' ember-qunit'的帮助者而不是来自' qunit'的股票帮助者。替换这个:
import { module, test } from 'qunit';
有了这个:
import { moduleFor, test } from 'ember-qunit';
import DS from 'ember-data';
然后,您更新模块声明:
moduleFor('mixin:my-model-mixin', 'Unit | Mixin | my model mixin', {
// Everything in this object is available via `this` for every test.
subject() {
// The scope here is the module, so we have access to the registration stuff.
// Define and register our phony host model.
let MyModelMixinObject = DS.Model.extend(MyModelMixin);
this.register('model:my-model-mixin-object', MyModelMixinObject);
// Once our model is registered, we create it via the store in the
// usual way and return it. Since createRecord is async, we need
// an Ember.run.
return Ember.run(() => {
let store = Ember.getOwner(this).lookup('service:store');
return store.createRecord('my-model-mixin-object', {});
});
}
});
完成此设置后,您可以在各个测试中使用this.subject()
来获取测试对象。</ p>
test('it exists', function(assert) {
var subject = this.subject();
assert.ok(subject);
});
此时,它只是一个标准的单元测试。您可能需要在Ember.run块中包装异步或计算代码:
test('it doubles the value', function(assert) {
assert.expect(1);
var subject = this.subject();
Ember.run(() => {
subject.set('someValue', 20);
assert.equal(subject.get('twiceSomeValue'), 40);
});
});