在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
permissiondoes 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
相关产品推荐
相关产品推荐

