javascript - vue-test-utils - 如何处理 $refs?
问题描述
情况
我正在尝试shallowMount
一个组件,但没有成功。
该组件$refs
用于读取 a 的高度div
。该值在计算属性中读取。然后在mounted
生命周期中,我将该值保存在商店中。
逻辑本身很简单并且工作正常。但是在测试套件中,组件的安装中断,因为$refs
关键是undefined
.
明确一点:我不打算测试$refs
,我只需要安装组件并继续进行实际的单元测试。
组件
这是标记:
<div ref="tgmp">
我将 div 的高度保存在计算属性中:
computed: {
barH() {
return this.$refs.tgmp.clientHeight
}
}
然后,在挂载的生命周期中,我提交存储中的值:
this.$store.commit('setBarHeight', this.barH)
考试
这是测试。我省略了不相关的东西,比如在 localVue 中安装商店。
beforeEach(() => {
wrapper = shallowMount(Bar, {
store,
})
})
test('is a Vue instance', () => {
expect(wrapper.isVueInstance()).toBeTruthy()
})
错误
Error in mounted hook: "TypeError: Cannot read property 'clientHeight' of undefined"
试图
我一直在尝试在任何地方寻找解决方案,但找不到。我试图模拟 $refs,但没有成功:
wrapper = shallowMount(ThePlayerBar, {
store,
mocks: {
$refs: {
tgmp: {
clientHeight: 600
}
}
}
})
问题
我怎样才能安装一个让我们$refs
在mounted
生命周期中发挥作用的组件?
解决方案
shallowMount
应该提供参考,所以this.$refs.tgmp
应该是<div>
元素,以防<div ref="tgmp">
在初始渲染时存在于视图中。
$refs
不应该被嘲笑,因为它是内部属性并在组件初始化时分配。它是依赖于 ref 的计算属性,因此可以在必要时对其进行模拟,因为在 JSDOM 中元素高度应为 0:
jest.spyOn(ThePlayerBar.options.computed, 'barH').mockReturnValue(600);
或者:
wrapper = shallowMount(Bar, {
store,
computed: { barH: () => 600 }
})
推荐阅读
- mapping - octave:为映射包添加 gdal 支持
- file-io - 在 True Basic Bronze 演示中打开文件
- kotlin - Corda 持久性:未知实体:PersistentFungibleToken
- pandas - AWS Lambda 不支持的类型“
": 将数据上传到 Dynamodb 时出现 TypeError - javascript - 当名称根据 url 更改时,如何获取 AJAX 响应的第一个字段?
- java - 正则表达式在java上的字符串上只包含ascii字符
- c# - 如何统一使用脚本创建新图层
- google-sheets - 如何查看授权用户列表谷歌表
- tally - 如何在 Tally 上分别显示销售额和其他部门销售额
- c# - c# ToList() 的性能问题