Unit testing 在EmberJS中,测试计算模型具有许多关系

Unit testing 在EmberJS中,测试计算模型具有许多关系,unit-testing,ember.js,Unit Testing,Ember.js,我试图在一个模型中为计算属性添加一个单元测试,在该模型中,它查找一个hasMany关系的属性,以根据另一个属性条件检索其中一个属性 以下是主要代码: import DS from 'ember-data'; import {computed} from '@ember/object'; export default DS.Model.extend({ gamePlayers: DS.hasMany('gamePlayer', { async: false }), sessio

我试图在一个模型中为计算属性添加一个单元测试,在该模型中,它查找一个hasMany关系的属性,以根据另一个属性条件检索其中一个属性

以下是主要代码:

import DS from 'ember-data';

import {computed} from '@ember/object';

export default DS.Model.extend({
    gamePlayers: DS.hasMany('gamePlayer', { async: false }),
    sessionUserId: DS.attr('number'),

    heroPlayer: computed('sessionUserId', 'gamePlayers', function() {
        const userId = parseInt(this.get('sessionUserId'));
        const heroPlayer = this.get('gamePlayers').find(player => player.get('userId') === userId);
        return heroPlayer;
    })
});
下面是我如何测试它的:

import { moduleForModel, test } from 'ember-qunit';
import { run } from '@ember/runloop';

moduleForModel('game', 'Unit | Model | game', {
  // Specify the other units that are required for this test.
  needs: ['model:gamePlayer']
});

test('heroPlayer retrieves the player where userId matches the session', function(assert) {
    const store = this.store();
    const done = assert.async();
    run(() => {
        const gamePlayers = [store.createRecord('gamePlayer', {userId: 111}), store.createRecord('gamePlayer', {userId: 222})];
        const sessionUserId = 111;
        const model = this.subject({ gamePlayers, sessionUserId });
        assert.equal(111, model);
        done(); 
    })
});
但是不管我如何实现测试,我总是会遇到不同的问题,在单元测试中我无法创建游戏玩家对象

在本例中,ember测试套件会删除一系列Backburner错误,如下所示:

Expected:   
{
  "__OVERRIDE_OWNER__ember1517897244339342530367001__": {
    "__POST_INIT__ember15178972443391088345028564__": function(){
...
    at http://localhost:7357/assets/tests.js:762:20
    at Backburner._run (http://localhost:7357/assets/vendor.js:20474:35)
    at Backburner.run (http://localhost:7357/assets/vendor.js:20197:25)

什么是余烬的方式来涵盖这种情况?我使用的是Ember 2.18,所以方法是正确的,但运行中的代码不正确,看起来我试图断言。与模型相等,而不是heroPlayer属性,此snnipet修复了问题:

run(() => {
    const gamePlayers = [store.createRecord('gamePlayer', {userId: 111}), store.createRecord('game-player', {userId: 222})];
    const sessionUserId =  111;
    const model = this.subject({ gamePlayers, sessionUserId });
    assert.equal(111, model.get('heroPlayer.userId'));
    done();
});

这并没有解决我的问题。我得到一个类似的错误:-`error:无法在对象上设置只读属性'gamePlayers'