我正在为一些遗留 javascript 编写一些 Jasmine 测试,这些测试会在代码中的某些点产生警报或确认。
在弹出警报的那一刻,它会在浏览器中暂停执行,要求我在继续之前按确定。
我确定我遗漏了一些东西,但有没有办法伪造警报?
更好的是可以找出警报的消息是什么?
谢谢你的帮助。
我正在为一些遗留 javascript 编写一些 Jasmine 测试,这些测试会在代码中的某些点产生警报或确认。
在弹出警报的那一刻,它会在浏览器中暂停执行,要求我在继续之前按确定。
我确定我遗漏了一些东西,但有没有办法伪造警报?
更好的是可以找出警报的消息是什么?
谢谢你的帮助。
spyOn(window, 'alert');
. . .
expect(window.alert).toHaveBeenCalledWith('a message');
var oldalert = alert;
alert = jasmine.createSpy();
// do something
expect(alert).toHaveBeenCalledWith('message')
alert = oldalert
另一种方法是在规范助手中执行此操作。
window.alert = function(){return;};
或者,如果您需要该消息。
var actualMessage = '';
window.alert = function(message){actualMessage = message; return;}
您只需创建一个间谍(令人惊讶的是createSpy()
)来模拟包含警报的函数。所以你可以做这样的事情:
beforeEach(function() {
functionWithAlert = jasmine.createSpy("functionWithAlert");
functionWithAlert("called as usual");
});
你也可以这样做来返回一些东西
oldFunctionWithAlert = jasmine.createSpy("oldFunctionWithAlert() spy").andCallFake(function() {
console.log("Doing some testing");
return "Test";
});
附带说明一下,如果可能的话,我建议您用破坏性较小的替代方案替换警报。有很多选项,比如JQuery UI dialog。