React 18 - TypeError:无法读取未定义的属性(读取“匹配”)

问题描述 投票:0回答:1

使用

window.matchMedia
进行测试时出现以下错误。这在生产和本地运行良好,这只是测试期间的一个问题。

我正在使用 React 18 和 vite。

TypeError: Cannot read properties of undefined (reading 'matches') 

建议在笑话文档中将以下内容添加到我的

setupTests.js

Object.defineProperty(window, 'matchMedia', {
  writable: true,
  value: vi.fn().mockImplementation(query => ({
    matches: false,
    media: query,
    onchange: null,
    addListener: vi.fn(), // deprecated
    removeListener: vi.fn(), // deprecated
    addEventListener: vi.fn(),
    removeEventListener: vi.fn(),
    dispatchEvent: vi.fn(),
  })),
})

这似乎不起作用。

reactjs jestjs vite matchmedia
1个回答
0
投票

解决方案是将以下内容添加到我的

setupTests.js
中,

global.matchMedia = global.matchMedia || function(query) {
  return {
    matches: false,
    media: query,
    onchange: null,
    addListener: vi.fn(), // deprecated
    removeListener: vi.fn(), // deprecated
    addEventListener: vi.fn(),
    removeEventListener: vi.fn(),
    dispatchEvent: vi.fn(),
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.