2016-10-17 3 views
1

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

// app/components/invoice-form.js 
export default Ember.Component.extend({ 
    actions: { 
    loadPartners() { 
     let self = this; 
     this.get('store').findAll('partner').then(function(partners) { 
     self.set('partners', partners); 
     }); 
    } 
    } 
}); 

В шаблоне этого компонента я прохожу эту акцию как закрытие детского компонента:

{{button-confirmation text="Are you sure?" onConfirm=(action "loadPartners")}} 

В моем интеграционном тесте, я вынести компонент как обычные

this.render(hbs`{{invoice-form}}`); 

действий loadPartners не передан как аргумент вспомогательному компоненту. Его действие только статического компонента.

Итак, вопрос в том, как заглушить действие loadPartners из теста интеграции?

ответ

2

В тесте интеграции вы не должны изменять внутреннюю часть компонентов. Вместо этого вы должны изменить реализации зависимостей вашего компонента.

Так что в этом случае вы должны заглушить store. See как оплатить store.

Ref from Guide

+0

Как вы вводите «магазин»? Вы можете посмотреть определение компонента в [twiddle] (https://ember-twiddle.com/7b868c31e43064c20f6e95991a53f353?openFiles=components.my-component.js%2Ctemplates.components.my-component.hbs)? – ykaragol

+0

На самом деле вам не следует вводить/хранить доступ в компоненте. Вы должны получить к нему доступ только на маршрутах. – ykaragol

+1

IMO, это нормально для доступа к хранилищу в компоненте, но у вас есть все основания для этого. – AlexMA

Смежные вопросы