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

Posted

技术标签:

【中文标题】分配给新变量后如何测试道具【英文标题】:How to test props after being assigned to new variable 【发布时间】:2019-09-10 03:22:17 【问题描述】:

我正在尝试使用道具测试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 案例会受到打击并返回 &lt;OtherComponent /&gt;,但它根本不会打击 else 案例。

如果我在测试中将 otherThingToTest 放入 props 对象中,它会命中第一个 if 案例,但因为我的另一个 prop thingToTest 已分配给变量,它不会命中 else 案例我不确定如何测试它。

【问题讨论】:

【参考方案1】:

由于您没有在测试代码中将thingToTest 属性传递给组件,因此propsVariable 将被分配未定义。

const propsVariable = this.props.thingToTest; // propsVariable = undefined

这就是为什么代码不会采用else 块内的if 路径,因此不会覆盖return &lt;OtherComponent /&gt;; 语句。

因此,您只需将 thingToTest 属性传递给测试代码中的组件,它就可以正常工作。

const props = 
  thingToTest: 'someValue'
  // passing propsVariable:  won't work
  // since it will be available as 
  // "this.props.propsVariable" inside the 
  // component 

注意:如果你不通过otherThingToTest props,else case 将会命中。

【讨论】:

以上是关于分配给新变量后如何测试道具的主要内容,如果未能解决你的问题,请参考以下文章

将性别变量分配给新列

如何以最有效的方式将运动员的名字分配给新列“名字”? [复制]

如何使用我的机器人将角色自动分配给新成员?

将尚未分配的 ID 分配给新实体

如何将 `value` 道具和 `v-model` 道具分配给自定义 Vue 组件?

Pandas 重新索引并将列分配给新列