如何在React组件之外测试私有功能

时间:2018-09-06 13:51:14

标签: javascript reactjs mocha enzyme

我在组件外部有一个私有函数。听起来比单独在MyComponent中进行更好的功能测试更方便,但它是私有的而不是导出的。

/\p{L}/u

我使用function func(){ return something; } export default class MyComponent extends Component { render <SomeComponent someProp={func()} /> } mocha进行测试,我想知道是否仍然可以测试私有功能而不是在组件内部对其进行测试。

2 个答案:

答案 0 :(得分:3)

func在模块作用域中定义。不可能超出JavaScript定义的范围之外的变量。

即使导出了func,也无法为其提供适当的单元测试,即在一个测试中测试func,然后测试一个单元取决于func({{ 1}})在另一个测试中,其中{/ {1}}被模拟/监视。 MyComponent在模块内被引用,其调用无法被监听或存根。

为了完全可测试,func必须是任一类方法,如果funcfunc相关联,这才有意义。或将func移至另一个模块。在这种情况下,可以模拟模块,或者如this answer所述,由于ES模块的工作方式,可以在模块MyComponent的导入中模拟/监视func的导入。

答案 1 :(得分:0)

很难从单元测试中获得私有方法的任何价值。

您为什么要那样?

  1. 增加测试覆盖率KPI。但是,一旦公开调用了私有方法,无论如何都会考虑到它们。
  2. 为确保一切正常...但是对私有方法进行测试可能会导致:

    a。当组件作为系统的一部分正常工作时,测试被破坏了(例如,私有方法已被更改,重命名或删除...但未对此进行测试)-否定否定

    b。私有方法的测试很好,但是组件损坏了(例如,需要调用私有方法,但不是)-误报