我开玩笑地测试还原动作。 特定的redux-action使用Notifications API作为副作用。我该如何模拟Notifications API?
现在,我只是这样模拟它:
SQL Injection
它有效,但是我认为有解决此问题的更优雅的解决方案。有什么想法吗?
我有这个模块来处理Notifications API:
global.Notification = {...};
答案 0 :(得分:0)
防止在每个测试文件上嘲笑Notification API的一种方法是配置Jest setupFiles。
jest.config.js
module.exports = {
setupFiles: ["<rootDir>config.ts"],
};
config.ts
globalThis.Notification = ({
requestPermission: jest.fn(),
permission: "granted",
} as unknown) as jest.Mocked<typeof Notification>;
注意: globalThis
是访问Global范围的最现代的方法。如果您没有所需的节点版本(v12+),只需坚持使用global
对象。
此示例还展示了 Typescript 的用法,这有点棘手。
如果要模拟不同的权限状态,可以在测试用例中执行以下操作:
// Notification.permission
jest
.spyOn(window.Notification, "permission", "get")
.mockReturnValue("denied");
// Notification.requestPermission (which is a Promise)
jest
.spyOn(window.Notification, "requestPermission")
.mockResolvedValueOnce("granted");