Приемочный тест ломает мою модель модульного теста, ember-cli 0.44

Вот как воспроизвести. Используя ember-cli 0.44, создайте новое приложение и сгенерируйте модели user и address. Каждый из них belongsTo друг друга.

Затем напишите модульный тест для address, который выглядит следующим образом:

test('it has a user', function() {
  var model = this.subject();
  var store = this.store();

  Ember.run(function() {
    var user = store.createRecord('user');
    model.set('user', user);

    ok(true);
  });
});

добавление needs: ['model:user'] к тесту. Тест проходит.

Теперь введите ember g acceptance-test index. Модульные тесты прерываются для модели прямо на строке model.set:

Died on test #1     at test (http://localhost:4200/assets/test-support.js:278:13)
    at eval (ember-wtf/tests/unit/models/address-test.js:21:5)
    at requireModule (http://localhost:4200/assets/vendor.js:70:29)
    at http://localhost:4200/assets/test-loader.js:14:29: Assertion Failed: You can only add a 'user' record to this relationship
Source:     
Error: Assertion Failed: You can only add a 'user' record to this relationship
    at new Error (native)
    at Error.EmberError (http://localhost:4200/assets/vendor.js:26705:23)
    at Object.Ember.assert (http://localhost:4200/assets/vendor.js:16889:15)
    at null.<anonymous> (http://localhost:4200/assets/vendor.js:70696:17)
    at Descriptor.ComputedPropertyPrototype.set (http://localhost:4200/assets/vendor.js:25311:22)
    at set (http://localhost:4200/assets/vendor.js:30004:14)
    at __exports__.default.Mixin.create.set (http://localhost:4200/assets/vendor.js:44299:9)
    at eval (ember-wtf/tests/unit/models/address-test.js:29:15)
    at Object.Backburner.run (http://localhost:4200/assets/vendor.js:13365:27)
    at apply (http://localhost:4200/assets/vendor.js:31547:27)

Любые идеи? store.createRecord нельзя использовать в модульных тестах?

Рекомендации:


person Sam Selikoff    schedule 15.09.2014    source источник
comment
Что выдает тестовый бегун?   -  person max    schedule 16.09.2014
comment
@papirtiger Я немного покопался в трассировке. store из моего теста не совпадает с тем, что использовался в ember-data для утверждения. Так что user instanceof store.modelFor('user') верно с моим магазином, но не с тем, который используется в либе.   -  person Sam Selikoff    schedule 19.09.2014
comment
Интересно, вызывает ли приемочный тест сначала создание экземпляра другого хранилища, и если просто нужно сохранить все тесты, связанные с хранилищем, в рамках приемочных тестов?   -  person Sam Selikoff    schedule 19.09.2014


Ответы (2)


Оказывается, ссылки на хранилище были другими, и хотя this.store() кажется благословенным способом получить хранилище, он отличается от того, что использовалось для создания model:

var model = this.subject();

model.store.toString();  //<DS.Store:ember816>
this.store().toString(); //<DS.Store:ember817>

Итак, когда я попытался использовать model.set('relationship'.., Ember подумал, что это не тот же магазин, и утверждение не удалось.

Использование model.store, похоже, помогает.


Я считаю, что это ошибка в помощнике по тестированию this.store.

person Sam Selikoff    schedule 20.09.2014
comment
FWIW, я провожу аналогичный тест в приложении без CLI (Teaspoon 0.8.0, QUnit 1.14.0, Ember.js 1.7.0) и не сталкиваюсь с той же проблемой. Оба способа доступа к хранилищу приводят к одному и тому же объекту хранилища. - person yorbro; 23.09.2014
comment
У вас также есть приемочные испытания? Какая версия ember-qunit? - person Sam Selikoff; 23.09.2014
comment
У меня также есть приемочные тесты (вы имеете в виду то же самое, что и интеграционные тесты?), но они не создают модели напрямую в магазине. Я использую последнюю версию ember-qunit, то есть 0.1.8 (github.com /rwjblue/ember-qunit/tree/v0.1.8). - person yorbro; 23.09.2014
comment
Вы зарегистрировали ошибку ember-cli для этого? - person jrjohnson; 09.10.2014
comment
Нет, потратил немного времени на поиск подходящего места + поиск теста, но не нашел. Хотя мне нужно. - person Sam Selikoff; 09.10.2014
comment
Привет, Сэм, в настоящее время я переношу приложение Hstry на ember-cli и столкнулся с той же проблемой, что и ты. Я мог бы решить это с помощью вашего исправления (спасибо, что разобрался с этим!), но мне интересно, есть ли у вас какие-либо обновления, исправленные в самом Ember? Я думаю, что this.store() и this.subject().store не должны быть разными, я почти уверен, что это ошибка. Знаете ли вы, поднималась ли эта проблема на GitHub в то же время? - person yorbro; 05.02.2015
comment
@yorbro Я думаю, что в прошлый раз, когда я проверял, они ссылались на одно и то же. Какая у вас версия CLI? - person Sam Selikoff; 05.02.2015
comment
@SamSelikoff Я на 0.1.11. - person yorbro; 05.02.2015
comment
Хм. Я так и не удосужился подать заявку, я не мог найти, где. Я думаю, это связано с одной из библиотек ember qunit? - person Sam Selikoff; 05.02.2015
comment
@SamSelikoff Я не уверен, в чем может быть ошибка, это может быть и проблема ember-cli. Так как я не уверен, я опубликовал тикет на трекере Ember.js (github. com/emberjs/ember.js/issues/10367). - person yorbro; 06.02.2015

Для новейших версий ember-cli, Ember и Ember-data этой проблемы не возникает. Проблема Github также близка https://github.com/ember-cli/ember-cli-qunit/issues/42

person morhook    schedule 27.10.2016