unit-testing - vue-test-utils find 没有返回,无法调用 setValue()
问题描述
我在模型中有一个文本框。我想要的是通过各种功能测试模型。目前发生的错误是[vue-test-utils]: find did not return #txtForget, cannot call setValue() on empty Wrapper
Login.vue 有一个文本框/输入框 -> 我用过 vuetify
<v-row class="ma-0 pa-0 mt-5 MultiFormStyle ">
<!-- EMAIL -->
<v-col md="12" sm="12" cols="12" class="">
<ValidationProvider
rules="required|email"
name="EMAIL ADDRESS"
v-slot="{ errors }"
>
<v-text-field
v-model="editedItem.email"
:label="errors[0] ? errors[0] : 'EMAIL ADDRESS'"
:error-messages="errors"
dense
hide-details=""
id="txtForget"
>
</v-text-field>
</ValidationProvider>
</v-col>
</v-row>
</ValidationObserver>
Login.spec.js 有一个测试如下
test("RESET PASSWORD test", async () => {
let wrapper = mount(Login, {
stubs: ["router-link", "router-view"],
vuetify,
router,
localVue,
});
wrapper.vm.editedItem.email = "admin@gmail.com";
let element_textbox = wrapper.find("#txtForget");
await element_textbox.setValue("test@gmail.com");
expect(wrapper.vm.editedItem.email).toBe("admin@gmail.com");
});
解决方案
我发现了问题并解决了如下
检查模型是否存在
let ForgetModel = wrapper.find("#forgetModel");
expect(ForgetModel.exists()).toBe(true);
然后触发按钮打开模型
let ForgetPasswordBtn = wrapper.find("button#forgotPasswordBtn");
ForgetPasswordBtn.trigger("click");
await wrapper.vm.$nextTick();
之后找到输入元素并在上面写一个文本
let element_email = wrapper.find("#txtForget");
await element_email.setValue("test@gmail.com");
最后检查书面价值是否保税
expect(wrapper.vm.editedItem).toBe("test@gmail.com");
这是我从适用于 vuetify 的各种文章中找到的正确方法。
完整代码如下
test("RESET PASSWORD test", async () => {
let wrapper = mount(Login, {
stubs: ["router-link", "router-view"],
vuetify,
router,
localVue,
});
let ForgetModel = wrapper.find("#forgetModel");
let ForgetPasswordBtn = wrapper.find("button#forgotPasswordBtn");
ForgetPasswordBtn.trigger("click");
await wrapper.vm.$nextTick();
let element_email = wrapper.find("#txtForget");
await element_email.setValue("test@gmail.com");
expect(ForgetModel.exists()).toBe(true);
expect(wrapper.vm.editedItem).toBe(true);
});
推荐阅读
- mysql - 使用子字符串后mysql quert中的多个警告
- javascript - 你可以用 Javascript 中的 match 做什么?
- c# - C# 动态类 - 如何从序列化输出中保留 var 名称
- php - 无法使用 php 获取和显示数据
- angular-dart - How to add markers and thumb labels to Angular Dart material-slider?
- wpf - 在 ShowDialog 和 Add_ContentRendered 期间向 TextBox 添加文本
- cakephp-3.7 - 如何在插件中创建和使用表单助手?
- android - 如何在 Wear OS 的表盘中使用视图?
- c - C中float和double之间的精度
- matlab - 如何知道要分配的向量的大小?