javascript - Vue Jest - 当 v-if 为 false 时,Div 元素仍然存在
问题描述
我有一个小项目,我正在学习在 Vue 中编写开玩笑的单元测试。在这个项目中,我有一个 HiChild 组件,它获取消息道具。当此消息的长度小于 3 时,应显示错误 div。我v-if="error"
用来检查是否应该显示 div。
这是组件:
<template>
<div>
<h2>The child says {{ message }}</h2>
<div class="error" v-if="error">{{ error }}</div>
</div>
</template>
<script>
export default {
props: {
message: {
type: String,
default: "Hello",
},
},
computed: {
error() {
return this.message.trim().length < 3
? " The child can say bigger words than that!"
: "";
},
},
};
</script>
但是在我为这个组件编写的单元测试中,我有一个测试,当错误变量不为空时,我测试 div 是否实际存在,而当它为空时不存在。但是当它应该为空时,测试没有通过。这是我写的单元测试:
describe('HiChild.vue', () => {
it('renders error when message is too short', () => {
const wrapper = shallowMount(HiChild, {
propsData: { message: 'hi' },
});
expect(wrapper.find('.error').exists()).toBe(true);
wrapper.setProps({ message: 'good day to you!' });
expect(wrapper.find('.error').exists()).toBe(false);
});
});
这是测试的输出:
解决方案
因为 :
computed: {
error() {
return this.message.trim().length < 3
? " The child can say bigger words than that!"
: "";
},
"" 与 false 不同
"" !== false
像这样直接返回false
computed: {
error() {
return this.message.trim().length < 3
? " The child can say bigger words than that!"
: false;
},
问候
推荐阅读
- java - 在 Java 中使用 Sendgrid X-SMTPAPI
- solr - Solr API 创建 copyField: "copyField source :'[title, director... description]' 不是 glob 并且不匹配任何显式字段或 dynamicField
- powershell - PowerShell Select-Object:将 -Unique 与 First/Last/Skip/Index 结合使用
- node.js - 部署 firebase 功能 - 没有创建 Firebase 应用“[DEFAULT]”
- c# - Automapper - 在两个类之间创建一个简单的映射并对特定类型使用自定义转换器
- python - 如何计算嵌套列表中的元素
- c# - 如何从 ViewModel 访问/更改按钮的内容
- netbeans - 如何减少 Netbeans 中菜单的高度
- python - Google Cloud Vertex AI - 模型不支持 400 'dedicated_resources'
- javascript - vuejs 在一个元素上使用多个 v-if