【问题标题】:How to reset jsDOM functions which has been overwritten如何重置被覆盖的jsDOM函数
【发布时间】:2020-07-21 07:32:38
【问题描述】:

我正在开玩笑地覆盖这样的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();

【问题讨论】:

    标签: node.js jestjs jsdom


    【解决方案1】:

    永远不应该通过赋值来模拟对象方法,因为它们不能以这种方式恢复。手动恢复它们是在重新发明轮子,因为这可以由 Jest 处理:

    jest.spyOn(Storage.prototype, 'setItem').mockImplementation(() => {
        throw new Error("error");
    });
    

    这样的模拟应该与jest.restoreAllMocks()restoreMock 配置选项一起使用,以便一致地恢复而不会有影响其他测试的风险。

    【讨论】:

    • 谢谢!!我能够修复我的测试用例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多