首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vue-test-utils窗口滚动

vue-test-utils窗口滚动
EN

Stack Overflow用户
提问于 2018-09-11 04:57:02
回答 1查看 4.5K关注 0票数 0

我需要一些关于如何使用vue- test -utils测试窗口滚动事件的建议

代码语言:javascript
复制
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进行的单元测试

代码语言:javascript
复制
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')
  })
})

当您检查是否添加了粘滞类时,测试失败。

如何测试此方法?我希望看到粘性类添加时,窗口滚动垂直

谢谢,RD

EN

回答 1

Stack Overflow用户

发布于 2018-09-11 06:10:02

您在div#topB包装器上触发了一个scroll事件,但事件侦听器在window上。Mocha和Jest使用的JSDom不支持通过window.scrollTo/window.scroll滚动window的普通JavaScript方法,但假设您使用attachToDocument挂载测试实例,您仍然可以使用以下命令手动分派scroll事件:

代码语言:javascript
复制
window.dispatchEvent(new CustomEvent('scroll', { detail: 2000 }))

您的事件处理程序必须分析该值的事件详细信息,并回退到window.pageYOffset

代码语言:javascript
复制
// var pageYOffset = window.pageYOffset;
var pageYOffset = !Number.isNaN(e.detail) ? e.detail : window.pageYOffset;

see GitHub repro 1

或者,您可以假定在滚动时将调用scroll-event处理程序;并通过直接运行scroll-event处理程序(wrapper.vm.topBResize())进行测试,然后检查预期结果。您可以在运行处理程序之前设置window.pageYOffset

代码语言:javascript
复制
window.pageYOffset = 1000;
wrapper.vm.topBResize();
expect(dBanner.classes()).contains('sticky');
wrapper.pageYOffset = 0;

see GitHub repro 2

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52265387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档