Почему ожидание в $ nextTick никогда не терпит неудачу? - PullRequest
0 голосов
/ 27 декабря 2018

Мне нужно использовать $nextTick для проверки некоторых частей моей программы.Каким-то образом это ломает мои тесты и делает их успешными все время - даже когда они должны терпеть неудачу.

Минимальный тестовый образец будет выглядеть так:

import App from "./App";
import { shallowMount } from "@vue/test-utils";

it("should fail", () => {
    const wrapper = shallowMount(App);
    wrapper.vm.$nextTick(() => {
        expect(1).toBe(3);
        done();
    });
});

Вы можете найти пример с песочницей здесь

Если вы откроете консоль, вы должны найти следующие сообщения об ошибках:

[Vue warn]: Error in nextTick: "Error: expect(received).toBe(expected)
Error: expect(received).toBe(expected)

Почему тест проходит успешно?Почему ошибки игнорируются?Как правильно использовать $nextTick, если примечание вроде так ?

1 Ответ

0 голосов
/ 27 декабря 2018

Чтобы дождаться, пока Vue.js закончит обновление DOM после изменения данных, вы можете использовать Vue.nextTick (callback) сразу после изменения данных.Обратный вызов будет вызван после обновления DOM.

Я не вижу ни одного триггера, который изменяет DOM в вашем тесте.И вы пропустили done аргумент в тестовом обратном вызове

Например, в следующем это wrapper.find('button').trigger('click')

it('fetches async when a button is clicked', (done) => {
  const wrapper = shallowMount(Foo)
  wrapper.find('button').trigger('click')
  wrapper.vm.$nextTick(() => {
    expect(wrapper.vm.value).toBe('value')
    done()
  })
})
...