Sinon警报存根:“试图包裹已经包裹的警报”

时间:2015-05-04 14:08:06

标签: javascript qunit sinon

我正在使用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');
});

2 个答案:

答案 0 :(得分:2)

将Sinon从1.14更新到1.14.1似乎可以解决问题。我认为这是一个错误?

作为旁注,代码在1.12中运行良好。

答案 1 :(得分:0)

window.alert是一个全局函数。每次运行beforeEach时,它都会用包装函数替换该函数。我猜Sinon会阻止你将函数包装两次。

您可以确保只有一次运行的设置功能。<​​/ p>

或修改您的代码,以便您不具有全局依赖关系(即传递对alert或委派window对象的引用)。这会对您的代码架构产生很大影响。这也说明了在设计架构时考虑测试的重要性。