В Ember js, как создать или смоделировать отношение hasMany в модульном тесте
Я тестирую модель, которая имеет свойства с DS.hasMany()
отношения. Всякий раз, когда я делаю следующий юнит-тест, я продолжаю получать эту ошибку в моем тестовом прогоне:Error: Assertion Failed: All elements of a hasMany relationship must be instances of DS.Model, you passed [<Ember.Object:ember367>,<Ember.Object:ember368>]
Может кто-нибудь пролить свет на это, пожалуйста?
Модель:
export default DS.Model.extend({
accounts: DS.hasMany('account'),
servicesAccounts: DS.hasMany('services-account'),
address: MF.fragment('address'),
appEligibilities: MF.fragmentArray('app-eligibility'),
appsForPremise: Ember.computed('accounts', function () {
return DS.PromiseArray.create({
promise: this.get('store').find('app', {
account: this.get('accounts').mapBy('id')
})
});
})
});
Модель уни-теста:
import { moduleForModel, test } from 'ember-qunit';
import Ember from 'ember';
moduleForModel('premise', 'Unit | Model | premise', {
needs: [
'model:account',
'model:services-account',
'model:address',
'model:app-eligibility'
]
});
test('Apps for premise', function (assert) {
let model = this.subject({
accounts: [Ember.Object.create({
id: 'account-1'
}),
Ember.Object.create({
id: 'account-2'
})],
appsForPremise: sinon.spy()
});
Ember.run(() => {
});
assert.equal(model.get('appsForPremise'), '[{id: account-1}, {id: account-2}]');
});
1 ответ
Решение
Вы не можете передать обычные объекты ember в отношение hasMany, они должны быть объектами модели хранилища. Вы можете создать их с помощью магазина, т.е.
let store = this.store();
Ember.run(() => {
let model = this.subject({
accounts: [
store.createRecord('services-account', {
id: 'account-1'
}),
store.createRecord('services-account',{
id: 'account-2'
})],
appsForPremise: sinon.spy()
});
});
Вызовы методов store должны идти в цикл выполнения, иначе Ember будет жаловаться.