Ember-qunit: вы можете только выгружать запись, которая не находится в полете

У меня есть некоторые модульные тесты, которые обращаются к хранилищу. Я бы подумал, что все будет хорошо, если я заверну их в обратный вызов. К сожалению, это не так. Я получаю эту ошибку:

afterEach не удалось на #foo: Assertion Failed: вы можете только выгрузить запись, которая не находится в поле Flight.

Как я понимаю, именно это означает run. Мой тест выглядит примерно так:

test('#foo', function(assert) {
  var store = this.store();
  var model = this.subject();

  Ember.run(function() {
    var secondModel = store.createRecord('secondModel', { foo: 'bar' });
    model.set('secondModel', secondModel);
    var foo = model.get('secondModelFoo');

    assert.equal(foo, 'bar');
  });
});

Ответы

Ответ 1

Похоже, что это больше не проблема в Ember Data v1.13.8 в сочетании с Ember v1.13.7.

Для следующей настройки:

Модели/первоклассников model.js

import DS from 'ember-data';

export default DS.Model.extend({
  secondModel: DS.belongsTo('second-model')
});

Модели/второй model.js

import DS from 'ember-data';

export default DS.Model.extend({
  foo: DS.attr('string')
});

тесты/блок/модель/первая-модель-test.js

import Ember from 'ember';
import { moduleForModel, test } from 'ember-qunit';

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

test('it exists', function(assert) {
  var model = this.subject();
  // var store = this.store();
  assert.ok(!!model);
});

test('#foo', function(assert) {
  var store = this.store();
  var model = this.subject();

  Ember.run(function() {
    assert.expect(1);

    var secondModel = store.createRecord('second-model', { foo: 'bar' });
    model.set('secondModel', secondModel);
    var foo = model.get('secondModel.foo');

    assert.equal(foo, 'bar');
  });
});

Проходят тесты. Репозиторий демонстрационных проектов на GitHub.