【发布时间】:2018-07-12 23:16:16
【问题描述】:
我有一个 Vue 组件,在 mounted 方法中我有这个:
this.el = d3.select(this.$el);
this.svg = this.el.select('svg')
.attr('width', mainSvgPos.svgWidth)
.attr('height', mainSvgPos.svgHeight)
.attr('viewBox', "0 0 " + mainSvgPos.svgWidth + " " + mainSvgPos.svgHeight)
.attr('style',"position:absolute;left:0;top:20px;width:100%;height:100%")
this.chart = this.svg.select('g.chart').attr('transform', "translate(" + chartCenter.leftOffset + ", " + chartCenter.topOffset + ")")
我正在使用jest 和vue-test-util 测试这个组件
我的测试是这样的:
describe('gauge', () => {
const wrapper = shallow(gauge, {
propsData: ...some data,
})
it('renders correctly', () => {
expect(wrapper.vm.$el).toMatchSnapshot()
});
})
当它第一次运行时,正如预期的那样,它会创建快照。在此快照中,我的父 svg 元素具有正确设置的所有属性(宽度、高度、视图框、样式)。但是g.chart 元素不包含任何属性(它应该包含transform)。之后,mounted 方法使用 D3 语法创建了一堆其他元素(我没有在这里粘贴它们)......这些都没有进入快照。
所以我的问题是this.svg = this.el.select('svg')... 中发生了什么会阻止正确创建快照以及如何解决这个问题。
我已经尝试过nextTick、jest.useFakeTimers()、shallow 安装,但没有什么能满足我的需求。
谢谢
【问题讨论】:
标签: d3.js vue.js vuejs2 jestjs vue-test-utils