测试记录及其关系是否已被破坏

时间:2018-01-04 16:27:39

标签: ember.js ember-data

我创建了一个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方法?

0 个答案:

没有答案