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
enzymepara obtener la instancia de React Component. Luego, llame alhandleMultiplymétodo directamente y haga la afirmación para ello. Además, si elhandleMultiplymé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 elhandleSubmitmétodo. Esto significa que elhandleSubmitmétodo no dependerá del valor de retorno de la implementación real delhandleMultiplymé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