J'essaie des tests unitaires, j'ai créé un sandbox avec un faux exemple https://codesandbox.io/s/wizardly-hooks-32w6l (en réalité j'ai un formulaire)
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;
Mon idée initiale était donc d'essayer de tester la fonction multiplier. Et a fait cela, ce qui ne fonctionne évidemment pas
import App from "../src/App";
test("Multiply", function() {
const expected = 21;
const result = App.handleMultiply(3, 7);
expect(result).toBe(expected);
});
Je reçois
_App.default.handleMultiply n'est pas une fonction
Mon approche est-elle correcte? Si oui, comment puis-je tester les fonctions? Sinon, dois-je tester d'un point de vue utilisateur au lieu de pour les fonctions internes (c'est ce que j'ai lu)? Dois-je tester la sortie à l'écran (je ne pense pas que ce soit raisonnable)?
javascript
reactjs
jestjs
user3808307
la source
la source
Réponses:
Vous pouvez utiliser la méthode instance () de
enzyme
pour obtenir l'instance de React Component. Ensuite, appelezhandleMultiply
directement method et effectuez l'assertion correspondante. De plus, si lahandleMultiply
méthode a un effet secondaire ou des calculs très compliqués, vous devez lui faire une simple valeur de retour simulée. Il fera un environnement de test isolé pour lahandleSubmit
méthode. Cela signifie que lahandleSubmit
méthode ne dépendra pas de la valeur de retour de l'implémentation réelle de lahandleMultiply
méthode.Par exemple
app.jsx
:table.jsx
:app.test.jsx
:Résultats des tests unitaires avec rapport de couverture:
Code source: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59796928
la source