分配新变量后如何测试道具

时间:2019-04-19 23:28:01

标签: javascript reactjs jestjs enzyme

我正在尝试用道具测试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被分配了一个变量,所以它赢了没遇到其他情况,我不确定如何测试。

1 个答案:

答案 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个案件。