Vue Тест Мокко: wrapper.setProps ({}) не обновляет реквизиты вложенных компонентов - PullRequest
0 голосов
/ 03 апреля 2020

Я разработчик этого Vue. js Плагин и в настоящее время работаю над тестом для v1.0.0, используя уже написанные тесты для более старых версий с некоторыми корректировками.

Сценарий

Тестирование компонентов со следующей структурой:

// receives props and passes through
VueEllipseProgress
    // receives props, adds new and passes through
   EpCircleContainer
      // receives props and do main SVG rendering
      CircleProgress

Использование заводской функции:

// this is the top level VueEllipseProgress component
import Container from "../../../src/components/VueEllipseProgress.vue";
import Circle from "../../../src/components/Circle/CircleProgress.vue";

const factory = propsData => {
  return mount(Container, {
    propsData: {
      ...propsData
    }
  });
};

const wrapper = factory({...})

Использование wrapper.setProps() в тесте для применения новых реквизитов , Проверьте, как измененные реквизиты влияют на визуализацию элементов SVG на другом конце. Вы можете увидеть весь код на GitHub .

Проблема

wrapper.setProps() правильно обновляет реквизиты VueEllipseProgress (верхний уровень) и wrapper.vm.$props имеет ожидаемые значения , Но реквизиты компонента CircleProgress остаются неизменными, HTML по-прежнему не обновляется. Это приводит к сбоям теста.

it("do some test", () => {

      /* do some test here, all is fine */

      wrapper.setProps({ someProp}); // set new props
      wrapper.vm.someProp; // updated

      circleWrapper.vm.someProp; // still old

      // fails!!!
      expect(circleWrapper.element.getAttribute("someProp")).to.equal(someProp);
    });

Здесь - дополнительные подробности кода, относящиеся к приведенному выше примеру.

Обратите внимание, что плагин работает правильно в режиме реального времени все реквизиты реактивны .

Тест работал для более ранних версий моего плагина. Тем временем я обновил @ vue / cli до версии 4.xx Возможно, сбои связаны с этим обновлением, но я не смог найти в примечаниях к выпуску никакой информации, которая могла бы это подтвердить.

...