【发布时间】:2021-06-25 04:25:03
【问题描述】:
我试图覆盖代码以增加覆盖率 报告百分比,
如何覆盖 vue 方法中的 if 语句?
在我使用 @vue/test-utils:"^1.1.4" 和 vue: "^2.6.12" 包版本的情况下,仅供参考,以下是我的实际组件,
<template>
<div :class="iconcls" >
<el-image
ref='cal-modal'
class="icons"
@click="handleRedirectRouter(urlname)"
:src="require(`@/assets/designsystem/home/${iconurl}`)"
fit="fill" />
<div class="desc" >{{ icondesc }}</div>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop } from 'vue-property-decorator';
@Component({
components: {}
})
class IconHolder extends Vue {
@Prop({ default: "" }) iconcls!: any;
@Prop({ default: "" }) iconurl!: any;
@Prop({ default: "" }) icondesc!: any;
@Prop({ default: "" }) urlname!: any;
handleRedirectRouter(url: string) {
if (url !== "") {
this.$router.push({ name: url });
}
}
}
export default IconHolder;
</script>
Iconholder.vue 组件的覆盖率报告
编辑 2:Ater @tony 更新,
我已经尝试过以下测试,但仍然出现错误,
import Vue from "vue";
import Vuex from "vuex";
import IconHolder from '@/components/designsystem/Home/IconHolder.vue';
import ElementUI, { Image } from "element-ui";
import { mount, createLocalVue } from '@vue/test-utils';
const localVue = createLocalVue();
localVue.use(Vuex);
localVue.use(ElementUI, {
Image
});
Vue.component('el-image', Image);
describe("IconHolder.spec.vue", () => {
it('pushes route by name', async () => {
const push = jest.fn();
const wrapper = mount(IconHolder, {
propsData: {
iconcls:"dshomesec5_comp_icons",
icondesc:"about",
iconurl:"components_icn_15.svg",
urlname: 'about'
},
mocks: {
$router: {
push
}
}
})
await wrapper.findComponent({ name: 'el-image' }).trigger('click');
expect(push).toHaveBeenCalledWith({ name: 'about' });
})
})
错误报告:
expect(jest.fn()).toHaveBeenCalledWith(...expected)
Expected: {"name": "about"}
Number of calls: 0
30 | })
31 | await wrapper.findComponent({ name: 'el-image' }).trigger('click');
> 32 | expect(push).toHaveBeenCalledWith({ name: 'about' })
【问题讨论】:
标签: vue.js jestjs code-coverage vue-test-utils ts-jest