vue.js est unit -Как протестировать наблюдателя на основе вычисленного значения? ( setComputed устарело)
У меня есть наблюдатель за языком в моем компоненте. Я получаю текущий язык от получателя (его значение изменяется с помощью переключателя языка панели инструментов, по умолчанию в state.language "en")
ContactForm.vue
...
data() {
return {
contactLang: "",
...
};
},
computed: {
...mapGetters(["language"]),
},
watch: {
language(newLanguage) {
console.lo("language changed to: ", newLanguage);
this.contactLang = newLanguage;
this.$validator.localize(newLanguage);
}
},
======================
Я пытаюсь проверить блок часов
ContactForm.spec.js
beforeEach(() => {
// create a fresh store instance for every test case.
storeMocks = createStoreMocks();
options = {
sync: false,
provide: () => ({
$validator: v
}),
store: storeMocks.store,
i18n
};
wrapper = shallowMount(ContactForm, options);
});
it("change the form language when locale changed", () => {
// update the Vuex store language , but it does not trigger the watcher ...
wrapper.vm.$store.state.language = "fr";
expect(wrapper.vm.contactLang).toBe("fr");
});
Есть ли способ проверить этот блок часов, или я должен реструктурировать свой код, чтобы избежать такого тестирования в этом компоненте...
1 ответ
Я решил проблему... наблюдатели асинхронны, поэтому я просто задерживаю утверждение
it("change the form language when locale changed", () => {
// pdate the Vuex store language , but it does not trigger the watcher ...
wrapper.vm.$store.state.language = "fr";
setTimeout(() => {
// assert changes operated by watcher
expect(wrapper.vm.contactLang).toBe("fr");
}, 50);
});