这是我的第一次前端测试经验。在这个项目中,我使用Jest快照测试,并在组件中获得了一个错误TypeError: window.matchMedia is not a function
。
我浏览了Jest文档,我找到了“手动模拟”部分,但我还不知道如何做到这一点。
发布于 2018-11-23 15:48:59
Jest文档现在有了一个“官方”解决方案:
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(),
})),
});
发布于 2017-03-09 03:07:58
我一直在用这个技巧来解决很多嘲弄的问题。
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",
调用的文件中。
发布于 2017-01-12 17:21:58
我在Jest测试文件中放置了一个matchMedia存根(高于测试),它允许测试通过:
window.matchMedia = window.matchMedia || function() {
return {
matches: false,
addListener: function() {},
removeListener: function() {}
};
};
https://stackoverflow.com/questions/39830580
复制相似问题