当前位置: 首页 > 知识库问答 >
问题:

开玩笑测试失败:打字错误:window.match媒体不是一个函数

饶高雅
2023-03-14

这是我第一次体验前端测试。在这个项目中,我使用Jest快照测试并得到一个错误TypeError:window。matchMedia不是我的组件中的功能

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

共有3个答案

潘青青
2023-03-14

我把一个matchMedia存根放在我的Jest测试文件中(在测试上面),它允许测试通过:

window.matchMedia = window.matchMedia || function() {
    return {
        matches: false,
        addListener: function() {},
        removeListener: function() {}
    };
};
卢俊发
2023-03-14

我一直在使用这种技术来解决一堆嘲笑问题。

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(),
      }))
    });
  });
});

或者,如果您想一直模拟它,您可以将从包调用的mock文件放入其中。json“SetupFileAfterEnv”:

参考:setupTestFrameworkScriptFile

宓昂雄
2023-03-14

笑话留档现在有一个“官方”变通方法:

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中实现的模拟方法

 类似资料:
  • 问题内容: 这是我的第一个前端测试经验。在这个项目中,我正在使用jest快照测试,并且组件内部出现错误。 我浏览了一些有趣的文档,发现“手动模拟”部分,但是我还不知道该如何做。 问题答案: 开玩笑的文档现在有一个“官方”解决方法: JSDOM中未实现的模拟方法

  • 我怎样才能使jest测试在任何抛出的错误上失败? 我试了一下,但还没有弄清楚语法。 我收到错误消息 getArcId getArcId=&>;错误 expect(received).rejects.ToThrow() 接收的函数未引发 但是下面的测试通过了,所以我要测试的函数确实抛出了(至少在我对抛出含义的最好理解下是这样的):

  • 问题内容: 我有这个反应 在这种情况下,如何测试axios?开玩笑说那里有一个异步代码的用例,在那里他们使用了模拟功能,但是我不知道我是否可以用axios做到这一点?参考:https : //facebook.github.io/jest/docs/tutorial- async.html 到目前为止,我已经测试了它是否返回了正确的类型 我不知道如何传递模拟数据并测试它是否返回,但是有人有任何想法

  • 问题内容: 我正在尝试为一个简单的React组件编写一个简单的测试,并且我想使用Jest来确认我用酶模拟点击时已调用了一个函数。根据Jest文档,我应该能够使用它:spyOn。 但是,当我尝试此操作时,我不断得到暗示我的间谍未定义的信息。我的代码如下所示: 在我的测试文件中: 有人了解我在做什么错吗? 问题答案: 嗨,伙计,我知道我来晚了,但是除了您的方式之外,您几乎已经完成,没有任何改变。当您使

  • 我有下面的打字稿类,我想测试在笑话。 这是我的测试: 如何模拟MyClass中使用的foo函数,以使测试通过?

  • 如何修复打开stream失败:是一个目录,我用的是< code>ubuntu 16.04和< code>PHP CodeIgniter框架。 法典 我正在尝试生成多个PDF文件,它会生成指定目录中的所有文件,但在过程结束时,它会显示一个名为 " Fopen(/path/)无法打开流:是一个目录" 并且还会抛出一条名为“无法创建输出”的消息