Ожидайте, что методы читают неправильное значение wrapper.vm.shown

Я тестирую свой компонент vuejs, и возникла очень странная проблема.

Вот мой тест

import { mount } from 'avoriaz';


let wrapper = mount(MyComponent, { globals: {$route},});

it('the click changes the value of shown', () => {
    // This passes
    expect(wrapper.vm.shown).to.equal(false);

    // the click on this element will turn shown value into true
    wrapper.first('#my_link').trigger('click');

    // the value of shown is indeed true now
    console.log(wrapper.vm.shown); // LOG LOG: true

    expect(wrapper.vm.shown).to.equal(true); // expected undefined to equal true
});

Что происходит и почему shown является undefined когда передается в качестве аргумента expect метод и является логическим при отображении через console.log?

1 ответ

Решение

DOM не закончил обновление, когда вы звоните expect второй раз.

использование $nextTick ждать обновления DOM перед звонком expect:

wrapper.first('#my_link').trigger('click');

wrapper.vm.$nextTick(() => {
  expect(wrapper.vm.shown).to.equal(true);
});

При работе с асинхронным кодом, console.log иногда лениво записывает значения, что означает, что они не будут такими, как вы ожидаете в момент выполнения этой строки. Смотрите этот пост.

Другие вопросы по тегам