Так что ваш экспорт по умолчанию
export default withStyles(styles)(CustomerAdd);
экспортирует функциональную (HOC) оболочку для вашего компонента на основе классов. И не имеет значения, если имя класса и импорта в
import CustomerAdd from '../CustomerAdd'
совпадают. Ваш тест импортирует упакованную версию и после вызова .find(CustomerAdd)
возвращает, что HOC не ваш класс. И вы не можете работать с экземпляром.
Краткосрочное решение: экспортируйте класс напрямую как именованный экспорт.
export class CustomerAdd {
...
}
export default withStyles(styles)(CustomerAdd);
Используйте именованный импорт в своих тестах:
import { CustomerAdd } from '../CusomerAdd';
Быстрое и грязное решение: используйте .dive
, чтобы отреагировать на компонент класса:
expect(wrapper.find(CustomerAdd).dive().state('addNewOnSubmit')).toEqual(true);
Это скорее антипаттерн, так как если вы добавляете дополнительный HOC в экспорт по умолчаниювам нужно будет пропатчить все связанные тесты, добавив соответствующее количество вызовов .dive().dive()....dive()
.
Долгосрочное решение: избегайте состояния тестирования, это детали реализации.
Вместо этого сосредоточьтесь на проверке того, чтобыли оказаны. Тогда вы в безопасности в случае множества различных техник рефакторинга, таких как замена класса функциональным компонентом, переименование элементов состояния / экземпляра, поднятие состояния вверх, подключение компонента к Redux и т. Д.