2016-08-23 2 views
1

Допустим, у меня есть метод в моем React компоненте:Фермент вызова метод

doSomething() { 
    // method uses this.props and this.state 
} 

Я хочу, чтобы проверить этот метод для различного реквизита и состояний, которые установлены. Так как я могу это назвать? MyClass.prototype.doSomething вызовет функцию, но тогда this.props и this.state не установлены.

+1

поэтому, когда вы создаете компонент с ферментом, что мешает вам просто проходить в реквизитах? – aw04

ответ

0

Вы могли бы просто apply значение this, что вы хотите использовать:

// MyClass.prototype.doSomething() becomes 

var mockThis = { 
    props: { coolProp: 'coolValue1' }, 
    state: { coolStateKey: 'coolValue2' } 
}; 
MyClass.prototype.doSomething.apply(mockThis);` 
+0

Это не очень подходящее решение. 'MyClass' теперь вечно загрязнен; будущие обращения к нему будут иметь макет. – Kousha

+0

@ Kousha не из OP правильно устанавливает свои тесты. Пример: создание нового экземпляра 'MyClass' в блоке' beforeEach' тестов Jasmine. –

1

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

const wrapper = shallow(<MyClass {...props} />) wrapper.instance().doSomething()

+0

Да, это работает. Просто имейте в виду, что после проверки состояния вы должны проверить 'wrapper', а не' wrapper.instance() '. – adc17

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