Внедрявам интернационализация в приложение за реакция с библиотеката react-intl. Езикът може да бъде задействан в различни компоненти, така че използвах библиотеката pubsub-js, за да публикувам всяко събитие когато езикът се промени, и се абонирайте за това събитие в моя централен компонент на приложението, който след това превключва локала и съобщенията, които се показват в цялото приложение.
Въпросът ми се отнася до писането на тестове с jest и ензим, който ще задейства промяната на езика и ще накара компонента на приложението ми да се актуализира с езика, така че мога да твърдя, че променливите на състоянието, занимаващи се с локала, са правилно актуализирани. Възможно ли е да се задействат такива събития или съм на грешен път тук? Моят код е посочен по-долу
//Relevant parts of the app component
class App extends Component {
constructor(props) {
super(props);
this.localeStore = new LocaleStore();
this.state = {
locale: this.localeStore.locale(),
messages: this.localeStore.messages()
};
}
componentDidMount() {
PubSub.subscribe(LocaleEvent.change, (event, locale) => {
this.setState({locale: locale.code, messages: locale.messages})
});
}
componentWillUnmount() {
PubSub.unsubscribe(LocaleEvent.change);
}
render() {
return (
<IntlProvider key={ this.state.locale } locale={ this.state.locale } messages={ this.state.messages }>
<div>
...
</div>
</IntlProvider>
);
}
}
// App.test.js
describe('App', () => {
it('renders without crashing', () => {
const div = document.createElement('div');
mount(<App />);
});
// This test fails, because the event is not published and the state does not change
it('correctly switches the language when the language change event is triggered', () => {
let app = mount(<App />);
PubSub.publish('locale.change', {code: 'en', messages: {}});
expect(app.state().locale).toEqual('en');
});
});
PubSub
импортиран ли е във вашия модул или идва от глобалното пространство на имена? - person Andreas Köberle   schedule 17.05.2017