gpt4 book ai didi

javascript - Jasmine 测试: Spying on the first call to a function

转载 作者:行者123 更新时间:2023-11-28 16:08:23 25 4
gpt4 key购买 nike

我正在编写一个测试,在其中强制抛出异常,然后在 catch block 中调用相同的函数。

在我的测试中,我需要监视一次 localStorage.setItem,这是我模拟异常的地方。当调用者再次被调用时,我需要删除 spy 或以某种方式防止 catch block 再次被击中。

it('handles quota_exceeded exceptions', function() {
spyOn(localStorage, 'setItem').andCallFake(function() {
throw new Error("QUOTA_EXCEEDED_ERR", "QUOTA_EXCEEDED_ERR: DOM Exception 22");
});
spyOn(Obj, 'add').andCallThrough();
spyOn(Obj, 'clean');

expect(function() {
Obj.add('foo', 'bar');
}).not.toThrow();
expect(Garage.add.callCount).toBe(2);
});

上面的测试代码会产生无限循环,因为 localStorage.setItem 每次都会引发异常。

任何想法或替代测试模式将不胜感激。

谢谢

最佳答案

您可以将 localStorage 配额状态存储在本地变量中。像这样的东西:

it('handles quota_exceeded exceptions', function() {
var quota_exceeded = true;

spyOn(localStorage, 'setItem').andCallFake(function() {
if (quota_exceeded) {
throw new Error("QUOTA_EXCEEDED_ERR", "QUOTA_EXCEEDED_ERR: DOM Exception 22");
}
});
spyOn(Obj, 'add').andCallThrough();
spyOn(Obj, 'clean').andCallFake(function () {
quota_exceeded = false;
});

expect(function() {
Obj.add('foo', 'bar');
}).not.toThrow();
expect(Garage.add.callCount).toBe(2);
});

关于javascript - Jasmine 测试: Spying on the first call to a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com