我正在使用Sinon 1.14。我想使用Sinon的存根来禁止所有的javascript警报。
使用最新的Chrome版本:42.0.2311.135 m
,我得到一个例外:“尝试包装已经包装的警报”
以下代码在最新的Firefox中运行良好。我会用小提琴更新。
var hooks = {
beforeEach: function(assert){
this.sandbox = sinon.sandbox.create();
this.sandbox.stub(window, 'alert', function (msg) { return false; });
},
afterEach: function(){
this.sandbox.restore();
}
};
module('example', hooks);
test('example', function(assert){
ok(true, 'does not throw an exception');
});
答案 0 :(得分:2)
将Sinon从1.14更新到1.14.1似乎可以解决问题。我认为这是一个错误?
作为旁注,代码在1.12中运行良好。
答案 1 :(得分:0)
window.alert
是一个全局函数。每次运行beforeEach
时,它都会用包装函数替换该函数。我猜Sinon会阻止你将函数包装两次。
您可以确保只有一次运行的设置功能。</ p>
或修改您的代码,以便您不具有全局依赖关系(即传递对alert
或委派window
对象的引用)。这会对您的代码架构产生很大影响。这也说明了在设计架构时考虑测试的重要性。