В моем компоненте есть асинхронная функция componentDidMount
, которая выполняет вызов API и обновляет хранилище mobx
. Компонент имеет аннотацию @observer
.
Я издевался над API, но у меня возникли проблемы - я не могу понять, как ожидать этот метод жизненного цикла в моем тесте:
it("Magick", async () => {
const comp = await mount(<Comp/>); // -- no point of await here
// await comp.instance().componentDidMount(); -- should work, even if function is called wtice
// await new Promise((resolve) => setTimeout(resolve, 100)); // -- smelly and prone to crashing
expect(Axios.post).toBeCalledTimes(1);
expect(MobX.value).toBe(-1);
comp.unmount();
});
Фрагмент компонента:
componentDidMount = async () => {
try {
const result = await AxiosWrapper.GetValue();
if (result) {
const errors = Parser.getErrors(result);
if (errors) {
console.log(errors);
} else {
MobX.value = Parser.getValue(result)
}
}
} catch (e) {
console.log(e);
}
};
Метод обертки Axios:
static async GetValue() {
return await Axios.post(...);
}
Единственное решение, которое я нашел, это добавление тайм-аута, но это недопустимо. Любое другое решение, которое я нашел, не работает - есть идеи?