Próbuję niektórych testów jednostkowych, utworzyłem piaskownicę z fałszywym przykładem https://codesandbox.io/s/wizardly-hooks-32w6l (w rzeczywistości mam formularz)
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;
Więc moim początkowym pomysłem była próba przetestowania funkcji mnożenia. I zrobił to, co oczywiście nie działa
import App from "../src/App";
test("Multiply", function() {
const expected = 21;
const result = App.handleMultiply(3, 7);
expect(result).toBe(expected);
});
dostaję
_App.default.handleMultiply nie jest funkcją
Czy moje podejście jest właściwe? Jeśli tak, to jak mam przetestować funkcje? W przeciwnym razie powinienem testować z punktu widzenia użytkownika zamiast funkcji wewnętrznych (to właśnie czytam)? Czy powinienem testować dane wyjściowe na ekranie (nie sądzę, aby było to uzasadnione)?
javascript
reactjs
jestjs
użytkownik3808307
źródło
źródło
Odpowiedzi:
Możesz użyć metody instance () ,
enzyme
aby uzyskać instancję React Component. Następnie wywołajhandleMultiply
metodę bezpośrednio i stwórz dla niej potwierdzenie. Ponadto, jeślihandleMultiply
metoda ma efekt uboczny lub bardzo skomplikowane obliczenia, musisz wykonać dla niej prostą próbkę zwracanej wartości. Stworzy izolowane środowisko testowe dlahandleSubmit
metody. Oznacza to, żehandleSubmit
metoda nie będzie zależała od wartości zwracanej rzeczywistej implementacjihandleMultiply
metody.Na przykład
app.jsx
:table.jsx
:app.test.jsx
:Wyniki testu jednostkowego z raportem pokrycia:
Kod źródłowy: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59796928
źródło