Vue.js 如何测试vue vuetify v-autocomplete

Vue.js 如何测试vue vuetify v-autocomplete,vue.js,jestjs,vuetify.js,vue-test-utils,v-autocomplete,Vue.js,Jestjs,Vuetify.js,Vue Test Utils,V Autocomplete,不知何故,在测试期间,我无法在html中看到v-autocomplete的项,而且设置项也不起作用。下面是v-autocomplete(将项目加载到支架上)和测试 //v-autocomplete.vue 导出默认值{ 数据(){ 返回{ 项目:[], }; }, 安装的(){ service.getItems()然后((响应)=>{ 此项=响应; }); }, }; 测试如下所示: //v-autocomplete.spec.js 从“Vue”导入Vue; 从“Vuetify”导入Vueti

不知何故,在测试期间,我无法在html中看到
v-autocomplete
项,而且设置项也不起作用。下面是
v-autocomplete
(将项目加载到支架上)和测试

//v-autocomplete.vue
导出默认值{
数据(){
返回{
项目:[],
};
},
安装的(){
service.getItems()然后((响应)=>{
此项=响应;
});
},
};
测试如下所示:

//v-autocomplete.spec.js
从“Vue”导入Vue;
从“Vuetify”导入Vuetify;
从“@/components/v-autocomplete.vue”导入VAutocomplete;
导入“@测试库/jest dom”;
从'@vue/test-utils'导入{createLocalVue,mount};
从“@/service/service”导入服务;
Vue.use(Vuetify);
常数项=[
{name:'Item 1',id:1},
{name:'Item 2',id:2},
];
const getItemsSpy=jest
.spyOn(服务“getItems”)
.mockImplementation(()=>{
返回新承诺((解决)=>{
解决(项目);
});
});
描述('v-autocomplete.vue',()=>{
让localVue;
让虚张声势;
让包装纸;
在每个之前(()=>{
开玩笑。clearAllMocks();
localVue=createLocalVue();
vuetify=新的vuetify();
});
它('should load the items',async()=>{
包装=安装(自动完成{
localVue,
vuetify,
普罗斯达:{},
});
expect(getItemsSpy).toBeCalledTimes(1);
用于(项目的常数项){
expect(getByText(wrapper.element,item.name)).toBeTruthy();//将失败->无法找到包含文本的元素
}
});
});
测试
expect(getByText(wrapper.element,item.name)).toBeTruthy()将失败,并显示消息
找不到文本为
的元素。同时,使用
console.log(wrapper.html())
打印html不会显示
v-autocomplete
的项目。所以我的问题是:

  • 如果项目已加载,我如何进行测试
  • 如何将其中一个已加载项设置为
    v-autocomplete
    的选定项

  • 单击
    .v-input\u slot
    ,可以打开自动完成菜单。我不认为,测试库功能是最佳实践

    单元测试:

    it(“应该加载项目”,async()=>{
    包装=安装(自动完成{
    localVue,
    vuetify,
    propsData:{}
    });
    const autocomplete=wrapper.element;
    const autocompleteControls=autocomplete.find(“.v-input\uu slot”);
    自动完成控件。触发器(“单击”);
    等待wrapper.vm.$nextTick();
    expect(getItemsSpy).toBeCalledTimes(1);
    用于(项目的常数项){
    expect(getByText(wrapper.element,item.name)).toBeTruthy();
    }
    });
    
    资料来源:

    v-autocomplete是表单的一部分,项目是从外部源加载的。要提交表单,我必须选择其中一个值。因此,我需要知道是否加载了某些内容。不幸的是,提供的解决方案不适用于我。我可以使用
    .findAll('.v-input\uu slot')
    找到元素并触发单击。但是html没有更新。你能添加你的package.json吗?我将对您的依赖项进行更多测试。因为,在console.log(wrapper.html())中,我可以看到菜单项。问题也可能出现在模拟项目中。在安装后尝试console.log(this.items)。