Jest- 在组件方法中测试变量
Jest- testing variables inside component methods
假设我有一个 class 组件,它具有如下内容:
export class Math extends React.Component {
...
someComponentMethod = numb => {
const sample = numb * 10
...
const result = numb -5
return result
}
是否可以在 Jest 中对 sample
变量进行测试断言?
无法为函数的私有内部编写断言。
我个人发现这个障碍可以鼓励编写更好的测试。通过仅测试 public 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
}
}
您现在可以断言用于计算 sample
值的任何逻辑对于各种输入都按预期工作。这种逻辑提取通常也使 someComponentMethod
更具可读性。
如果您绝对需要测试其他一些内部行为并且意识到增加的代码债务,您可以让您的方法执行副作用并为它们编写断言。例如,不是将 sample
定义为函数范围变量,而是在组件实例上创建 this.sample
属性 并更新它。然后在测试中调用目标方法,然后断言 componentInstance.sample
已按预期更改。
我已经设法通过以下方式在函数内测试某个变量值:
sum1.js
function sum() {
result = 1 + 2;
};
module.exports = sum;
sum1.test.js
const sum = require('./sum1');
sum();
test('adds 1 + 2 to equal 3', () => {
expect(result).toBe(3);
});
希望对你有帮助,干杯!
假设我有一个 class 组件,它具有如下内容:
export class Math extends React.Component {
...
someComponentMethod = numb => {
const sample = numb * 10
...
const result = numb -5
return result
}
是否可以在 Jest 中对 sample
变量进行测试断言?
无法为函数的私有内部编写断言。
我个人发现这个障碍可以鼓励编写更好的测试。通过仅测试 public 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
}
}
您现在可以断言用于计算 sample
值的任何逻辑对于各种输入都按预期工作。这种逻辑提取通常也使 someComponentMethod
更具可读性。
如果您绝对需要测试其他一些内部行为并且意识到增加的代码债务,您可以让您的方法执行副作用并为它们编写断言。例如,不是将 sample
定义为函数范围变量,而是在组件实例上创建 this.sample
属性 并更新它。然后在测试中调用目标方法,然后断言 componentInstance.sample
已按预期更改。
我已经设法通过以下方式在函数内测试某个变量值:
sum1.js
function sum() {
result = 1 + 2;
};
module.exports = sum;
sum1.test.js
const sum = require('./sum1');
sum();
test('adds 1 + 2 to equal 3', () => {
expect(result).toBe(3);
});
希望对你有帮助,干杯!