>需要一些关于如何使用 vue-test-utils 测试窗口滚动事件的建议 下面是我的 js
export default {
created () {
window.addEventListener('scroll', this.bannerResize);
},
methods: {
topBResize () {
var header = document.getElementById('topB');
var pos1 = header.offsetTop;
var pageYOffset = window.pageYOffset;
if (pageYOffset > pos1) {
header.classList.add('sticky');
} else {
header.classList.remove('sticky');
}
}
}
}
下面是我使用 vue-test-utils 的单元测试
import {expect} from 'chai';
import {createLocalVue, shallow} from 'vue-test-utils'
const localVue = createLocalVue()
localVue.use(VueRouter)
localVue.use(Vuex)
const wrapper = shallow(Banner, {
localVue,
router,
attachToDocument: true
})
describe('topB.vue', () => {
it('topB resize', () => {
wrapper.setData({ bsize: true })
const dBanner = wrapper.find('#topB')
wrapper.trigger('scroll')
const pageYOffset = 500;
const pos1 = 200;
expect(dBanner.classes()).contains('sticky')
})
})
检查是否添加了粘性类时,测试失败。
如何测试此方法?我希望看到在窗口垂直滚动时添加粘性类
谢谢 研发
您正在div#topB
包装器上触发scroll
事件,但事件侦听器处于window
上。Mocha 和 Jest 使用的 JSDom 不支持通过window.scrollTo
/window.scroll
滚动window
的正常 JavaScript 方法,但假设你用attachToDocument
挂载测试实例,你仍然可以手动调度一个scroll
事件:
window.dispatchEvent(new CustomEvent('scroll', { detail: 2000 }))
事件处理程序必须分析此值的事件详细信息并回退到window.pageYOffset
。
// var pageYOffset = window.pageYOffset;
var pageYOffset = !Number.isNaN(e.detail) ? e.detail : window.pageYOffset;
请参阅 GitHub 重现 1
或者,您可以假设scroll
事件处理程序将在滚动时调用;并通过直接运行scroll
事件处理程序(wrapper.vm.topBResize()
(进行测试,然后检查预期结果。您可以在运行处理程序之前设置window.pageYOffset
:
window.pageYOffset = 1000;
wrapper.vm.topBResize();
expect(dBanner.classes()).contains('sticky');
wrapper.pageYOffset = 0;
请参阅 GitHub 重现 2