В связи с проблемой на Github у меня есть компонент Comp
, который при экспорте обернут injectSheet
из reactjss
. Пожалуйста, ознакомьтесь с настройками в codesandbox.
В модульном тесте я хотел бы утверждать, что этот компонент содержит <a>
, что он и делает (см. codeandbox), но тест все равно не проходит:
describe("<Comp /> component", () => {
const wrapper = shallow(<Comp />);
it("should render a <a>", () => {
expect(wrapper.find('a')).to.have.length(1);
});
});
Я получаю Error: [undefined] Please use ThemeProvider to be able to use WithTheme
. Поэтому моей естественной (возможно, неправильной?) реакцией было обернуть компонент ThemeProvider
:
const wrapper = shallow(
<ThemeProvider theme={{}}>
<Comp />
</ThemeProvider>
)
Тогда я получаю AssertionError: expected { length: 0 } to have a length of 1 but got 0
.
Я испробовал множество подходов, включая вызов dive
, find
или first
с дополнительным вызовом shallow
, но всегда получал Please use ThemeProvider to be able to use WithTheme
:
// 1. dive(), as suggested in
// https://github.com/cssinjs/react-jss/issues/30#issuecomment-268373765
expect(wrapper.dive('Comp')).to.have.length(1);
expect(wrapper.dive('Comp').find('a')).to.have.length(1);
expect(wrapper.dive().find('a')).to.have.length(1);
// 2. find() / first(), as suggested in https://github.com/airbnb/enzyme/issues/539
expect(wrapper.find(Comp).shallow().find('a')).to.have.length(1);
expect(wrapper.first().shallow().find('a')).to.have.length(1);
Любые идеи здесь? Я немного новичок в модульном тестировании с React, поэтому был бы признателен, если бы кто-нибудь просветил меня по этому поводу;)