Ich habe die folgende intelligente Komponente, die die Lebenszyklusmethode componentWillMount verwendet, um einen asynchronen Aufruf zum Abrufen von Daten durchzuführen. Ich schreibe Tests dafür, aber ich kann nicht testen, ob die Funktion aufgerufen wird, und wenn dies der Fall ist, wird sie aufgerufen, bevor die Komponente bereitgestellt wird. Sie sind wichtige Fälle, die abgedeckt werden müssen.Wie componentWillMount in einer verbundenen React-Redux-Komponente testen?
Der Code für die Smart-Komponente ist wie folgt:
const mapStateToProps = (state) => { const context = state.context; return {
isError: context.error, }; };
const options = { componentWillMount: (props) => {
const { dispatch } = props;
dispatch(fetchContextUser()); }, };
export function App(props) { return (
<div className="app">
{ props.isError ? (<ContextError />) : (<Main />) }
{ props.children }
</div> ); }
App.propTypes = { children: PropTypes.object, // eslint-disable-line react/forbid-prop-types isError: PropTypes.bool.isRequired, // eslint-disable-line react/forbid-prop-types };
export default connect(mapStateToProps, null)(functional(App, options));
I Enzym, Chai und anderen Mock-Adapter zum Testen dieser Komponente verwenden. Der Testblock folgt:
describe.only('Render Connected Component',() => { let store; beforeEach(() => {
store = mockStore({
context: {
error: false,
},
}); }); it('Should render connected components',() => {
const connectedWrapper = mount(
<Provider store={store}>
<ConnectedApp />
</Provider>
);
expect(connectedWrapper).to.be.present(); }); });
Ich möchte nur zwei Dinge prüfen:
1.) fetchContextUser 2. genannt wird) fetchContextUser aufgerufen wird, bevor das Bauteil montiert wird
Auch ich erhalte eine Fehlermeldung, die ** wrapper.instance (...) componentWillMount ist keine Funktion. **. –
Das kann passieren, weil Ihre Komponente eine ** funktionale Komponente ** ist und diese Art von Komponenten nicht auf ** componentWillMount ** oder irgendeine ** Lebenszyklusmethode ** zugreifen kann. –
Ja, es ist eine funktionale Komponente. Gibt es eine Chance dafür? –