2017-02-14 2 views
2

Я монтирование компонент с другим компонентом внутри него, как так:Фермент - как проверить начальное состояние внутреннего компонента?

const wrapper = mount(<IntlProvider><SignUpForm /></IntlProvider>); 

Компонент <SignUpForm /> должен иметь начальное состояние {errors: {}}. Я использую следующее утверждение:

expect(wrapper.find(SignUpForm).state('errors')).to.equal({}); 

, но я получаю следующее сообщение об ошибке при выполнении теста:

Error: ReactWrapper::state() can only be called on the root

Итак, как же я Acces состояния <SignUpForm /> компонента?

ответ

2

Ну, вы не можете этого сделать с помощью фермента (насколько я знаю), но для этого есть веская причина - модульные тесты должны тестировать отдельную часть приложения (никогда не две части в одном тесте) , Этот поставщик действительно является компонентом, поэтому вы пытаетесь протестировать родительский компонент для установки дочернего компонента ...

Эта же проблема заключается в том, что у вас есть компоненты, подключенные к хранилищу redux, вы можете их обернуть в Provider, но это не дело. Вы должны отделить компонент от завернутой версии, а затем протестировать только компонент с изоляцией от третьих лиц/родительских/сиблингов.

Я экспортирую компонент и подключенный компонент из одного файла (два экспорта, один по одному, один по умолчанию), а в тестах я импортирую только компонент имени (НЕ подключен). Я не wan't для тестирования Redux поставщика;)

//component.jsx 
export function MyComp() {} 
export default connect()(MyComp) 

//component.test.js 
import {MyComp} from "./component" 

//another component 
import MyComp from "./component" 
+1

В примере выше, компонент опирается на реакцию, которая обычно Intl оборачивает корневой компонент реагировать маршрутизатор как так '' '. ..'''. SignUpForm ожидает реквизит из этого пакета реагирования, поэтому для того, чтобы SignUpForm был истинным представлением на компоненте, используемом в приложении, я чувствую необходимость издеваться над этими реквизитами. – JoeTidee

+0

С сокращением у меня есть точно такая же проблема, поэтому я тестирую {MyComp} с подготовленными реквизитами и передается этому компоненту вручную. Я знаю, что есть место для опечаток и т. Д., Но в нем нет никаких других компонентов, кроме проверенных. – kzg

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