如何使用JEST模拟Notifications API?

时间:2019-05-09 17:00:27

标签: api notifications mocking jestjs browser-api

我开玩笑地测试还原动作。 特定的redux-action使用Notifications API作为副作用。我该如何模拟Notifications API?

现在,我只是这样模拟它:

SQL Injection

它有效,但是我认为有解决此问题的更优雅的解决方案。有什么想法吗?

我有这个模块来处理Notifications API:

global.Notification = {...};

1 个答案:

答案 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");