我创建了一个Ember服务,其中包含一个销毁记录的方法及其相关数据(由模型中的关系定义)。
这是我的 delete-user.js 服务。
import Promise from 'rsvp';
import Service, { inject as service } from '@ember/service';
export default Service.extend({
store: service(),
deleteUserAndAssociatedData(userRecord) {
return userRecord.get('posts')
.then(postRecords => this._deletePosts(postRecords))
.then(() => userRecord.destroyRecord());
},
_deletePosts(postRecords) {
return Promise
.all(postRecords.invoke('destroyRecord'));
}
});
我的问题是我应该如何测试此功能?我想验证用户及其帖子是否已被标记为已销毁。
这是我目前在 delete-user-test.js 中所拥有的:
import { moduleFor, test } from 'ember-qunit';
import { run } from '@ember/runloop';
import { A } from '@ember/array';
import EmberObject from '@ember/object';
moduleFor('service:delete-user', 'Integration | Service | delete-user', {
integration: true
});
let generateDummyUser = container => {
const store = container.lookup('service:store');
return run(() => {
return store.createRecord('user', { name: 'Dummy User'});
});
};
let generateDummyPost = container => {
const store = container.lookup('service:store');
return run(() => {
return store.createRecord('post');
});
};
test('it exists', function (assert) {
let service = this.subject();
assert.ok(service);
});
test('should delete the user', function (assert) {
let service = this.subject();
run(() => {
const userRecord = generateDummyUser(this.container);
service.deleteUserAndAssociatedData(userRecord);
assert.equal(userRecord.get('isDeleted'), true, 'the user is deleted');
});
});
test('should delete posts of the user', function (assert) {
let service = this.subject();
run(() => {
const userRecord = generateDummyUser(this.container);
const postRecord = generateDummyPost(this.container);
userRecord.get('posts').pushObject(postRecord);
return run(() => {
service.deleteUserAndAssociatedData(userRecord);
assert.equal(postRecord.get('isDeleted'), true, 'the post is deleted');
})
});
});
但测试在第一个断言时失败,并出现以下错误:
断言失败:在被破坏的对象上调用set:.isSynced = false“
有没有人可以指出我正确的方向?也许我应该存根适配器?窥探destroyRecord方法?