Как я могу добавить свойства к компоненту в модульном тесте до инициализации? - PullRequest
1 голос
/ 02 октября 2019

Я работаю над компонентом Ember с функцией init, для которой я хотел бы добавить модульный тест. Компонент имеет следующие свойства:

1) Функция init не должна запускаться более одного раза, и

2) Компонент зависит от передачи ему модели (currentUser).

До сих пор я пытался написать такой тест:

test('#init', function(assert) {
  const component = this.owner.lookup('component:component-that-depends-on-property');

  const currentUser = make('user');
  component.set('currentUser', user);

  component.init();

  assert.ok(component.somethingHasHappened);
});

Моя проблема в том, что метод init запускается в строке owner.lookup, что означает, что у меня нет способа получить currentUser вкомпонент до его запуска. Опять же, я не могу запустить метод init более одного раза, не взорвав состояние компонента.

Я заметил, что метод поиска принимает аргумент options, и подумал, что смогу использовать его для передачи currentUser,но, похоже, это не сработало, и я не смог найти много документации по методу поиска.

Я бы хотел, по возможности, избежать написания интеграционного теста для этого. Есть ли хороший способ сделать это / обходной путь, которого я не вижу?

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Я бы предложил написать интеграционные тесты для компонентов. Избегайте написания юнит-тестов для компонентов, а пишите юнит-тесты для контроллеров, миксинов, моделей, маршрутов, сервисов

1 голос
/ 17 октября 2019

Если вы проводите модульное тестирование компонента, вы можете выполнить:

const component = this.owner.factoryFor('component:component-that-depends-on-property').create({
  currentUser: user,
});

Это создаст экземпляр вашего компонента с установленным currentUser. Вам не нужно будет явно вызывать init(), потому что он вызывается на create().

...