Javascript 在这个sinon.spy mocha示例中,是否有一种简单的方法可以更改确认和警报

Javascript 在这个sinon.spy mocha示例中,是否有一种简单的方法可以更改确认和警报,javascript,unit-testing,requirejs,mocha.js,sinon,Javascript,Unit Testing,Requirejs,Mocha.js,Sinon,我做了一些细微的修改,以隐藏无法共享的细节,但我正在测试的示例函数(我们称之为checkbro.js)就在这里 checkbro.js function saveRecord(context) { if (!checkIfBro.knowsABro(context.currentRecord)) { if (confirm('Do you Bro?')) { context.currentRecord.setValue('b

我做了一些细微的修改,以隐藏无法共享的细节,但我正在测试的示例函数(我们称之为checkbro.js)就在这里

checkbro.js

function saveRecord(context) {
        if (!checkIfBro.knowsABro(context.currentRecord)) {
            if (confirm('Do you Bro?')) {
                context.currentRecord.setValue('bro', -10, true);
            } else {
                alert('Please someone has to be a bro');
            }
        }
        return true;
    }
我的一个测试示例(它失败了ReferenceError:confirm未定义)

checkbro.spec.js

it('should only execute for create new bro master', function() {
        let checkIfBro = { knowsABro: sinon.spy() };
        let confirm = {confirm: sinon.spy()};
        let record = {currentRecord: { setValue: sinon.spy()}};
        let checkIfBroRec = requirejs('contacts/checkbro', [checkIfBro, log]);
        checkIfBroRec.saveRecord({ record: record });
        checkIfBroRec.knowsABro.called.should.be.true;
        record.currentRecord.setValue.called.should.be.true;
    });
有一点背景知识,我做了很多浏览器测试,刚刚开始单元测试,所以这里有一些学习曲线。如果能更好地使用sinon或其他模块,我洗耳恭听。这也是由开发人员编写的,现在由我接管

失败
ReferenceError:未定义确认

在上面的代码中,
if(confirm('doyoubro?')
使用
let confirm={confirm:sinon.spy()}
作为函数。这将抛出
TypeError:confirm不是一个函数

var confirm = {};
function foo () {
    if(confirm()){}
}

foo(); // TypeError: confirm is not a function
因此,可以安全地得出结论,导致代码到达if(confirm('doyou Bro?')的不是
checkIfBroRec.saveRecord({record:record})
,因此问题一定在于:

let checkIfBroRec = requirejs('contacts/checkbro', [checkIfBro, log]);

不幸的是,这部分代码并没有完全显示在上面的代码中,因此我无法评估问题的原因。

如果您使用以下行传递依赖项,您将在哪里向函数传递确认间谍?
requirejs('contacts/checkbro',[checkIfBro,log])
那么您应该包括confirm spy,这样函数将有一个引用。