跟进该问题Github https://github.com/cssinjs/react-jss/issues/184,我有一个组件Comp
导出时,包裹着injectSheet
from reactjss
. 请参阅上的设置代码沙箱 https://codesandbox.io/s/674jknj4z.
在单元测试中,我想断言该组件包含<a>
,它确实做到了(请参阅codesandbox),但无论如何测试都会失败:
describe("<Comp /> component", () => {
const wrapper = shallow(<Comp />);
it("should render a <a>", () => {
expect(wrapper.find('a')).to.have.length(1);
});
});
I get 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
or first
额外shallow
打电话,但我会always以结束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 单元测试有点陌生,所以如果有人能在这方面启发我,我将不胜感激;)