Я разработчик этого 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 Возможно, сбои связаны с этим обновлением, но я не смог найти в примечаниях к выпуску никакой информации, которая могла бы это подтвердить.