我正在尝试一些单元测试,我用一个伪造的示例https://codesandbox.io/s/wizardly-hooks-32w6l创建了一个沙箱(实际上我有一个表单)
class App extends React.Component {
constructor(props) {
super(props);
this.state = { number: 0 };
}
handleSubmit = (number1, number2) => {
this.setState({ number: this.handleMultiply(number1, number2) })
}
handleMultiply = (number1, number2) => {
return number1 * number2
}
render() {
const { number } = this.state;
return (
<div className="App">
<form onSubmit={e => this.handleSubmit(3, 7)}>
<input type="submit" name="Submit" value="Multiply" />
</form>
<Table number={number} />
</div>
);
}
}
export default App;
所以我最初的想法是尝试测试乘法功能。并这样做了,这显然是行不通的
import App from "../src/App";
test("Multiply", function() {
const expected = 21;
const result = App.handleMultiply(3, 7);
expect(result).toBe(expected);
});
我懂了
_App.default.handleMultiply不是函数
我的方法正确吗?如果是,那么如何测试功能?否则,我应该从用户的角度进行测试,而不是针对内部功能进行测试(这是我读到的内容)吗?我应该在屏幕上测试输出(我认为这不合理)吗?
2
您正以错误的思维方式来处理这个问题。而是触发表单提交,然后检查以确保状态已正确更新,包括乘法逻辑。
—
Alexander Staroselsky
@AlexanderStaroselsky好的,谢谢,我会尝试,并做一个更具体的问题,如果我被卡住了
—
user3808307
@AlexanderStaroselsky如果子组件中的表单和父组件中的提交处理程序怎么办?我需要在那里进行集成测试吗?
—
user3808307
可能是个见解,但我一定会分别测试它们。对孩子的测试将是在提交时触发它通过道具从父级传递的函数,然后还要测试状态是否按您期望的那样呈现。对于父级,我将触发事件并确保状态已正确更新。
—
Alexander Staroselsky
@AlexanderStaroselsky谢谢
—
user3808307