私はいくつかのユニットテストを試みています、私は偽の例でサンドボックスを作成しました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
ありがとう、私がしようとします、と私は動けなくなる場合は、より具体的な質問を行い、[OK]を@AlexanderStaroselsky
—
user3808307
@AlexanderStaroselsky子コンポーネントのフォームと親の送信ハンドラの場合はどうなりますか?そこで統合テストを行う必要がありますか?
—
user3808307
それは意見の問題かもしれませんが、私は間違いなくこれらを個別にテストします。子のテストでは、送信時に親から小道具を介して渡された関数をトリガーし、期待どおりに状態がレンダリングされることをテストします。親の場合、イベントをトリガーして、状態が正しく更新されていることを確認します。
—
アレクサンダースタロスキー
@AlexanderStaroselskyありがとう
—
user3808307