Ale*_*dro 8 javascript tdd jasmine jestjs enzyme
假设我有一个类组件,它有这样的东西:
export class Math extends React.Component {
...
someComponentMethod = numb => {
const sample = numb * 10
...
const result = numb -5
return result
}
Run Code Online (Sandbox Code Playgroud)
是否可以sample在 Jest 中对变量进行测试断言?
Cal*_*ler 13
不可能为函数的私有内部编写断言。
我个人发现这个障碍鼓励编写更好的测试。通过仅测试公共 API 的正确性,您可以重构内部结构而无需更新任何测试。现有测试继续强制内部更改正常工作。
针对内部行为编写测试很容易增加被测试代码的维护工作。由于测试与源代码的耦合更加紧密,因此在进行更改时需要更加注意。这也会降低测试的可靠性,因为对测试进行更多更改会增加测试本身出现错误的可能性。
如果您发现自己想要测试某些内部行为,那么现在可能是提取某些功能的好时机。在您的示例中,sample值计算可以提取到它自己的纯函数中:
export class Math extends React.Component {
...
computeSampleValue(input) {
return input * 10
}
someComponentMethod = numb => {
const sample = this.computeSampleValue(numb)
...
const result = numb -5
return result
}
}
Run Code Online (Sandbox Code Playgroud)
您现在可以断言,用于计算sample值的任何逻辑都按预期对各种输入起作用。这种逻辑提取通常也someComponentMethod更易读。
如果您绝对需要测试一些其他内部行为并且知道增加的代码债务,您可以让您的方法执行副作用并为它们编写断言。例如,不是定义sample为函数作用域变量,而是this.sample在组件实例上创建一个属性并更新它。在测试中,您然后调用目标方法,然后断言componentInstance.sample已按预期更改。
| 归档时间: |
|
| 查看次数: |
25248 次 |
| 最近记录: |