首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jest测试失败: TypeError: window.matchMedia不是函数

Jest测试失败: TypeError: window.matchMedia不是函数
EN

Stack Overflow用户
提问于 2016-10-03 11:31:28
回答 18查看 96.9K关注 0票数 161

这是我的第一次前端测试经验。在这个项目中,我使用Jest快照测试,并在组件中获得了一个错误TypeError: window.matchMedia is not a function

我浏览了Jest文档,我找到了“手动模拟”部分,但我还不知道如何做到这一点。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2018-11-23 15:48:59

Jest文档现在有了一个“官方”解决方案:

代码语言:javascript
运行
复制
Object.defineProperty(window, 'matchMedia', {
  writable: true,
  value: jest.fn().mockImplementation(query => ({
    matches: false,
    media: query,
    onchange: null,
    addListener: jest.fn(), // Deprecated
    removeListener: jest.fn(), // Deprecated
    addEventListener: jest.fn(),
    removeEventListener: jest.fn(),
    dispatchEvent: jest.fn(),
  })),
});

未在JSDOM中实现的模拟方法

票数 237
EN

Stack Overflow用户

发布于 2017-03-09 03:07:58

我一直在用这个技巧来解决很多嘲弄的问题。

代码语言:javascript
运行
复制
describe("Test", () => {
  beforeAll(() => {
    Object.defineProperty(window, "matchMedia", {
      writable: true,
      value: jest.fn().mockImplementation(query => ({
        matches: false,
        media: query,
        onchange: null,
        addListener: jest.fn(), // Deprecated
        removeListener: jest.fn(), // Deprecated
        addEventListener: jest.fn(),
        removeEventListener: jest.fn(),
        dispatchEvent: jest.fn(),
      }))
    });
  });
});

或者,如果您想一直模拟它,可以将mocks文件放入您的package.json"setupFilesAfterEnv": "<rootDir>/src/tests/mocks.js",调用的文件中。

参考资料:setupTestFrameworkScriptFile

票数 65
EN

Stack Overflow用户

发布于 2017-01-12 17:21:58

我在Jest测试文件中放置了一个matchMedia存根(高于测试),它允许测试通过:

代码语言:javascript
运行
复制
window.matchMedia = window.matchMedia || function() {
    return {
        matches: false,
        addListener: function() {},
        removeListener: function() {}
    };
};
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39830580

复制
相关文章

相似问题

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