30

我正在为一些遗留 javascript 编写一些 Jasmine 测试,这些测试会在代码中的某些点产生警报或确认。

在弹出警报的那一刻,它会在浏览器中暂停执行,要求我在继续之前按确定。

我确定我遗漏了一些东西,但有没有办法伪造警报?

更好的是可以找出警报的消息是什么?

谢谢你的帮助。

4

4 回答 4

88
spyOn(window, 'alert');
. . . 
expect(window.alert).toHaveBeenCalledWith('a message');
于 2014-11-17T16:17:00.830 回答
4
var oldalert = alert;
alert = jasmine.createSpy();
// do something
expect(alert).toHaveBeenCalledWith('message')
alert = oldalert
于 2013-10-22T13:34:25.177 回答
2

另一种方法是在规范助手中执行此操作。

window.alert = function(){return;};

或者,如果您需要该消息。

var actualMessage = ''; 
window.alert = function(message){actualMessage = message; return;}
于 2014-01-05T19:56:59.903 回答
0

您只需创建一个间谍(令人惊讶的是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

于 2013-10-22T13:51:58.177 回答