Javascript 在这个sinon.spy mocha示例中,是否有一种简单的方法可以更改确认和警报
我做了一些细微的修改,以隐藏无法共享的细节,但我正在测试的示例函数(我们称之为checkbro.js)就在这里 checkbro.jsJavascript 在这个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
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,这样函数将有一个引用。