我正在使用ember 2.18和ember-data-factory-guy 3.3.0。
我想测试组件内部的操作。在操作中,我使用makeList来创建和返回模型列表。在我的余烬应用程序中,我将商店传递给组件,并在调用操作时进行查询。
这是我的工厂:
import FactoryGuy from 'ember-data-factory-guy';
FactoryGuy.define('contact', {
sequences: {
first_name: (num) => `FirstName${num}`,
last_name: (num) => `LastName${num}`,
email: (num) => `contact${num}@example.com`,
phone: (num) => `01234567${num}`,
linkedin: (num) => `samplelinkedinurl${num}`,
},
default: {
first_name: FactoryGuy.generate('first_name'),
last_name: FactoryGuy.generate('last_name'),
email: FactoryGuy.generate('email'),
phone: FactoryGuy.generate('phone'),
linkedin: FactoryGuy.generate('linkedin'),
position: 'CEO',
client_office: FactoryGuy.belongsTo('office')
},
traits: {
withClient: {
client: FactoryGuy.belongsTo('client')
},
withOffice: {
client_office: FactoryGuy.belongsTo('office')
}
}
});
此外,我的行动是以下行动:
_this.store.query('contact', {term: searchTerm}).then(function(contacts) { ... })
我已经创建了一个TestStore类来测试这些动作。这是炭烬数据存储区查询方法的最小复制。查询方法如下:
query(modelName, attributes, trait=null) {
console.log('ATTRIBUTES PASSED TO TEST STORE QUERY: ', attributes)
// make a new record of selected model with factory guy
let _this = this,
records = Ember.isEmpty(trait) ? makeList(modelName, 4) : makeList(modelName, 4, trait);
// Push it to test-store
if (!this.models[modelName]) {
this.models[modelName] = Ember.A([]);
}
records.forEach(function(record) {
_this.models[modelName].pushObject(record); })
// Create promise to return
let recordPromise = new Ember.RSVP.Promise((resolve) => {
resolve(records);
});
return DS.PromiseArray.create({promise: recordPromise});
}
在渲染测试中,它工作正常。如果我要手动运行操作(例如在单元测试中),则会收到以下错误:
FactoryGuy没有应用程序的
manualSetup不能正常工作,因为商店服务卡在商店的“ willDestroy()”中,并且_pushedInternalModels为null,因此无法将任何模型推入商店。
对此有任何想法/建议吗?