我正在尝试用道具测试if
条件。如果我通过this.props.thingToTest
,它会很好用,但是如果我分配类似const propsVariable = this.props.thingToTest
的东西并测试if
条件,我将不会获得代码覆盖率。
我尝试将const作为props传入浅层包装中,或者在测试中声明了const,但仍然看不到。
组件代码:
render() {
const propsVariable = this.props.thingToTest;
if (this.props.otherThingToTest === 'test') {
return <Component />;
} else {
if (propsVariable) {
return <OtherComponent />;
}
}
}
测试代码:
const props = {
propsVariable: {}
}
it('tests else condition in render method', () => {
const wrapper = shallow(<OriginalComponent {...props} />);
const instance = wrapper.instance();
jest.spyOn(instance, 'render');
instance.render();
expect(instance.render).toHaveBeenCalled();
});
我期望else案例被命中并返回<OtherComponent />
,但它根本不会达到else案例。
如果我在测试中将otherThingToTest
放在props对象中,它将很好地满足第一个if
的情况,但是因为我的另一个prop thingToTest
被分配了一个变量,所以它赢了没遇到其他情况,我不确定如何测试。
答案 0 :(得分:1)
由于您尚未将thingToTest
道具传递给测试代码中的组件,因此propsVariable
将被分配为未定义。
const propsVariable = this.props.thingToTest; // propsVariable = undefined
这就是为什么代码不会在if
块内采用else
路径,因此不会覆盖return <OtherComponent />;
语句的原因。
因此,您只需将thingToTest
道具传递给测试代码中的组件,它将正常工作。
const props = {
thingToTest: 'someValue'
// passing propsVariable: {} won't work
// since it will be available as
// "this.props.propsVariable" inside the
// component
}
请注意:如果您不通过else
个道具,将会遇到otherThingToTest
个案件。