@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);
    })
  });
});
  • Вопрос задан
  • 170 просмотров
Решения вопроса 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, но с этим я уже предлагаю разобраться самостоятельно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы