У меня есть компонент 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
со всеми правильно установленными атрибутами (ширина, высота, viewBox, стиль). Однако элемент g.chart
не содержит никаких атрибутов (он должен содержать transform
). После этого смонтированный метод создает кучу других элементов с использованием синтаксиса D3 (я их здесь не вставлял)... ни один из них не попадает в снимок.
Итак, мой вопрос заключается в том, что происходит в this.svg = this.el.select('svg')...
, что мешает правильному созданию моментального снимка, и как мне это исправить.
Я пробовал nextTick
, jest.useFakeTimers()
, shallow
монтирование, ничего не дает мне то, что я хочу.
Спасибо