Разделите ваш код.
Дайте энхансеру один файл, а компоненту другой.
На энхансере экспортируйте только сгенерированный HOC:
export default compose(
withState('showDropdown', 'handleDropdown', false),
withHandlers({
handleClickOutside: props => () => {
props.handleDropdown(false)
},
menuItemClick: props => () => {
props.handleDropdown(false)
},
}),
onClickOutside,
)
В другом файле экспортируйте только AccountDropdown
(без переноса). Затем в другом месте экспортируйте их «комбинацию»:
import enhancer from './enhancer.js';
import AccountDropdown from './AccountDropdown.jsx';
export default enhancer(AccountDropdown);
Теперь, на тестах, импортируйте каждый отдельный файл, «улучшайте» компонент и найдите его правильно:
import enhancer from './enhancer.js';
import AccountDropdown from './AccountDropdown.jsx';
const Component = enhancer(AccountDropdown);
const props = {
showDropdown: false,
handleDropdown: jest.fn(),
menuItemClick: jest.fn(),
onLogout: jest.fn(),
user: {},
}
const output = mount(<Component {...props} />)
const ToggleDropdown = output.find(AccountDropdown) // no quotes
ваш ToggleDropdown
будет иметь компонент для тестирования. Пример:
expect(handleDropdown).to.have.property('callCount', 0);
Обратите внимание, что mount
вернет ReactWrapper
, в соответствии с документами . Вы можете взглянуть на реквизит с помощью функции ToggleDropdown.props()
.