我有一个 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
and测试这个组件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
没有什么能满足我的需求。
谢谢