You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Jest中Mock window.Notification报错:Property `permission`无get访问类型

Jest Mock window.Notification 报错:Property permission does not have access type get

我尝试在Jest中Mock window.Notification,但收到如下错误:

Error: Property permission does not have access type get

我的setupTests.ts代码:

import '@testing-library/jest-dom';

globalThis.Notification = ({
  requestPermission: jest.fn(),
  permission: "granted",
} as unknown) as jest.Mocked<typeof Notification>;

测试用例中的代码:

jest
  .spyOn(window.Notification, 'permission', 'get')
  .mockReturnValue('denied');

问题出在你初始化Notification时,把permission定义成了普通属性,而原生的Notification.permission是getter属性。你用jest.spyOn指定了'get'访问类型,但实际挂载的是普通属性,所以触发报错。

下面是两种可行的修复方案:

方案一:用getter定义permission(推荐)

修改setupTests.ts,将permission改成getter形式,贴近原生Notification的属性结构:

import '@testing-library/jest-dom';

globalThis.Notification = ({
  requestPermission: jest.fn(),
  get permission() {
    return "granted";
  },
} as unknown) as jest.Mocked<typeof Notification>;

修改后测试用例里的spyOn指定'get'就能正常工作。

方案二:移除spyOn的访问类型参数

如果不想用getter,直接修改测试用例,去掉第三个'get'参数,直接mock普通属性:

jest.spyOn(window.Notification, 'permission').mockReturnValue('denied');

内容的提问来源于stack exchange,提问作者radek wilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:52:08