如何重置已被覆盖的jsDOM函数
How to reset jsDOM functions which has been overwritten
我开玩笑这样覆盖jsdom localstorage API,以测试我的try catch代码。
Storage.prototype.setItem = jest.fn(() => {
throw new Error("error");
});
如何重置它的实现?
我目前正在做这个。有更简洁的方法吗?
const setImplementation = Storage.prototype.setItem;
Storage.prototype.setItem = jest.fn(() => {
throw new Error("error");
});
expect(() => {
localStorageHelper.setData(key, value);
}).not.toThrow();
Storage.prototype.setItem = setImplementation;
done();
永远不要通过赋值来模拟对象方法,因为它们无法通过这种方式恢复。手动恢复它们是在重新发明轮子,因为这可以由 Jest 处理:
jest.spyOn(Storage.prototype, 'setItem').mockImplementation(() => {
throw new Error("error");
});
像这样的模拟应该与 jest.restoreAllMocks()
或 restoreMock
配置选项一起使用,以便在不影响其他测试的情况下持续恢复。
我开玩笑这样覆盖jsdom localstorage API,以测试我的try catch代码。
Storage.prototype.setItem = jest.fn(() => {
throw new Error("error");
});
如何重置它的实现?
我目前正在做这个。有更简洁的方法吗?
const setImplementation = Storage.prototype.setItem;
Storage.prototype.setItem = jest.fn(() => {
throw new Error("error");
});
expect(() => {
localStorageHelper.setData(key, value);
}).not.toThrow();
Storage.prototype.setItem = setImplementation;
done();
永远不要通过赋值来模拟对象方法,因为它们无法通过这种方式恢复。手动恢复它们是在重新发明轮子,因为这可以由 Jest 处理:
jest.spyOn(Storage.prototype, 'setItem').mockImplementation(() => {
throw new Error("error");
});
像这样的模拟应该与 jest.restoreAllMocks()
或 restoreMock
配置选项一起使用,以便在不影响其他测试的情况下持续恢复。