Компонент не отображается правильно во время теста

Я пишу интеграционные тесты для своего приложения Ember CLI, и один из моих тестов каждый раз терпит неудачу. Это мой текущий тест:

// tests/integration/project-test.js
test('displays "Projects" when the user views a project from Collaborate', function() {
  visit('/collaborate');

  click('.table > tbody > tr > td > a'); // it goes to /collaborate/projects/:id
  expect(0);
});

Когда он переходит к /collaborate/projects/:id, я получаю сообщение об ошибке «Не удается прочитать свойство setLegend со значением null». Я проследил это до своего компонента:

// app/components/foo-comp.js
import Ember from "ember";

export default Ember.Component.extend({
  fooObject: null,
  didInsertElement: function () {
    var foo = new Foo();

    this.set('fooObject', foo);
    Ember.run.once(this, 'updateChart');
  },
  updateChart: function () {
    var foo = this.get('fooObject');
    foo.setLegend(); // this is where the error comes from
  }.observes('data','fooObject')
});

Обратите внимание, что тест проходит, если я изменяю updateChart на:

updateChart: function () {
  var foo = this.get('fooObject');

  if (foo) {
    foo.setLegend();
  }
}.observes('data','fooObject')

Почему бы ему не установить эту переменную во время теста? Он отлично работает в разработке и производстве, поэтому я не уверен, почему это происходит. Я предполагаю, что это потому, что didInsertElement не запускается при запуске теста. Мысли? Идеи?

Эмбер версия:

version: 0.1.12
node: 0.10.33
npm: 2.1.8

Изменить

Может быть Foo() из внешнего модуля? Может тест не имеет к нему доступа, поэтому его нельзя добавить на страницу? Сомневаюсь, и я уже пытался добавить его в .jshintrc, но думаю, что это все еще может быть связано с этим. Я также зарегистрировал в консоли Foo во время выполнения теста, и он действительно отображался в консоли.

Честно говоря, возможно, это связано с вставкой в ​​DOM. У меня были проблемы с инициализацией других компонентов, так что, вероятно, didInsertElement работает не так, как я думаю.


person NJP    schedule 04.02.2015    source источник


Ответы (1)


Хм, может быть, ваш тест не ждет, пока все загрузится?

Я не уверен, но вы можете попробовать:

test('displays "Projects" when the user views a project from Collaborate', function() {
  expect(0);
  visit('/collaborate');
  andThen(function() {
    click('.table > tbody > tr > td > a');
  });
});
person andrusieczko    schedule 05.02.2015
comment
Боюсь, это не сработало. Foo() из внешнего модуля, возможно ли это? Я добавлю это к моему вопросу. - person NJP; 05.02.2015