J'ai un composant qui restitue un bouton si une propriété errorMessage
n'est pas null
.Propriétés de test injectées par React Redux
class App extends Component {
static propTypes = {
// Injected by React Redux
errorMessage: PropTypes.string,
resetErrorMessage: PropTypes.func.isRequired,
};
renderErrorMessage() {
const { errorMessage } = this.props;
if (!errorMessage) return null;
return (
<p id="error-message">
<b>{errorMessage}</b>{' '}
<button id="dismiss" onClick={this.props.resetErrorMessage()}>
Dismiss
</button>
</p>
);
}
render() {
return (
<div className="app">
{this.renderErrorMessage()}
</div>
);
}
}
La propriété injectée par React Redux:
import { connect } from 'react-redux';
import App from '../components/App/App';
const mapStateToProps = (state, ownProps) => ({
errorMessage: state.errorMessage,
});
export default connect(mapStateToProps, {
resetErrorMessage:() => ({
type: 'RESET_ERROR_MESSAGE',
})
})(App);
Comme vous pouvez le voir, j'ai aussi resetErrorMessage
que efface errorMessage
:
const errorMessage = (state = null, action) => {
const { type, error } = action;
if (type === RESET_ERROR_MESSAGE) {
return null;
} else if (error) {
return error;
}
return state;
};
Comment puis-je tester mon élément et dire si je cliquez sur le bouton, puis cache le bouton ou si errorMessage
n'est pas null
affiche le bouton?
Je veux obtenir quelque chose comme ceci:
const props = {
errorMessage: 'Service Unavailable',
resetErrorMessage,
};
it('renders error message',() => {
const wrapper = shallow(<App {...props} />);
expect(wrapper.find('#error-message').length).toBe(1);
wrapper.find('#dismiss').simulate('click');
expect(wrapper.find('#error-message').length).toBe(0);
});
Mais mon problème est que si je simule cliquer pour fermer le bouton - message d'erreur ne se cache pas.
Parlez-vous d'un cadre de test? – Akhil
Vous rendez le composant avec la propriété définie comme vous le souhaitez. L'un des principaux avantages de React est qu'il vous permet de le faire - exporter une version non connectée du composant et tester normalement. La logique derrière la valeur de propriété elle-même est testée dans vos tests Redux. –
@DaveNewton voulez-vous dire que je ne devrais pas tester cliquez sur le bouton? – rel1x