Задать вопрос
@Levingstoun

Как написать асинхронный jest тест для action // mobx?

Сам action
addItem = text => {
           axios.post("/task", {
               headers: { "Content-Type": "application/json" },
               text: text
             })
             .then(res => {
               this.arr.push(res.data.task);
             })
             .catch(e => console.log(e));
         };

Пробовал что-то типа такого, не получилось, получаю ошибку TypeError: Cannot read property 'then' of undefined
describe("STORE", () => {
  it("create new task", () => {
    const store = new Store();
    const text = "test";
    store.addItem(text).then( () => {
    return expect(store.arr.length).toBe(1);
    })
  });
});
  • Вопрос задан
  • 214 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Во-первых, addItem ничего не возвращает, естественно нельзя вызвать у ничего (undefined) метод then, так как у undefined в принципе не может быть методов. Нужно добавить return:
addItem = text => {
           return axios.post("/task", {
               headers: { "Content-Type": "application/json" },
               text: text
             })
             .then(res => {
               this.arr.push(res.data.task);
             })
             .catch(e => console.log(e));
         };

Во-вторых, у jest для промисов есть конструкция resolves
describe("STORE", () => {
  it("create new task", () => {
    const store = new Store();
    const text = "test";
    expect(store.addItem(text)).resolves.toBe(1);
  });
});

И да, тест будет вполне законно провален, причина опять таки в return, но с этим я уже предлагаю разобраться самостоятельно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 15:50
50000 руб./за проект
18 дек. 2024, в 15:41
3000 руб./за проект
18 дек. 2024, в 15:31
500 руб./за проект