Estoy probando algunas pruebas unitarias, creé un sandbox con un ejemplo falso https://codesandbox.io/s/wizardly-hooks-32w6l (en realidad tengo un formulario)
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;
Entonces, mi idea inicial era tratar de probar la función de multiplicación. E hice esto, que obviamente no funciona
import App from "../src/App";
test("Multiply", function() {
const expected = 21;
const result = App.handleMultiply(3, 7);
expect(result).toBe(expected);
});
yo obtengo
_App.default.handleMultiply no es una función
¿Es correcto mi enfoque? En caso afirmativo, ¿cómo pruebo las funciones? De lo contrario, ¿debería probar desde el punto de vista del usuario en lugar de las funciones internas (esto es lo que leo)? ¿Debo probar la salida en la pantalla (no creo que esto sea razonable)?
javascript
reactjs
jestjs
usuario3808307
fuente
fuente
Respuestas:
Puede usar el método instance () de
enzyme
para obtener la instancia de React Component. Luego, llame alhandleMultiply
método directamente y haga la afirmación para ello. Además, si elhandleMultiply
método tiene un efecto secundario o cálculos muy complicados, debe realizar un simple valor de retorno simulado para él. Hará un entorno de prueba aislado para elhandleSubmit
método. Esto significa que elhandleSubmit
método no dependerá del valor de retorno de la implementación real delhandleMultiply
método.P.ej
app.jsx
:table.jsx
:app.test.jsx
:Resultados de la prueba unitaria con informe de cobertura:
Código fuente: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59796928
fuente