Я пишу интеграционные тесты для своего приложения 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
работает не так, как я думаю.