首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jest使用react-intersection-observer测试react组件

Jest使用react-intersection-observer测试react组件
EN

Stack Overflow用户
提问于 2019-07-12 21:50:18
回答 6查看 7.9K关注 0票数 10

我正在尝试测试一个组件,该组件包含一个包含react-intersection-observer的子组件,但我总是得到一个错误

我试图导入库,但仍然失败。这是初始测试

代码语言:javascript
复制
    beforeEach(() => {
      testContainer = document.createElement("div");
      document.body.appendChild(testContainer);
      subject = memoize(() =>
        mount(<FilterNav {...props} />, { attachTo: testContainer })
      );
    });

    afterEach(() => {
      testContainer.remove();
    });

    context("the main filter is shown initially", () => {
      it("sets focus on the primary filter", () => {
        subject();
        const input = testContainer.querySelector(".main-input");
        expect(document.activeElement).toEqual(input);
      });

我收到此错误,未捕获ReferenceError:未定义IntersectionObserver

有没有办法让我模仿IntersectionObserver?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-08-09 14:11:48

我实际上能够用一个模拟函数来解决这个问题,并将它包含在窗口对象中

代码语言:javascript
复制
const observe = jest.fn();

window.IntersectionObserver = jest.fn(function() {
  this.observe = observe;
});
票数 2
EN

Stack Overflow用户

发布于 2019-12-04 20:58:38

您可以在模拟文件中执行类似的操作(例如,我将其命名为intersectionObserverMock.js ):

代码语言:javascript
复制
const intersectionObserverMock = () => ({
     observe: () => null
})
window.IntersectionObserver = jest.fn().mockImplementation(intersectionObserverMock);

在测试文件中直接导入文件,如下所示:

代码语言:javascript
复制
import '../__mocks__/intersectionObserverMock';

这将解决您的"IntersectionObserver未定义“的问题

票数 15
EN

Stack Overflow用户

发布于 2019-08-08 13:36:14

使用IntersectionObserver的组件也有同样的问题。

更新:我们需要在测试文件中直接导入intersection。

import 'intersection-observer';

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

https://stackoverflow.com/questions/57008341

复制
相关文章

相似问题

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