javascript - 在这个 sinon.spy mocha 示例中是否有一种简单的方法来更改确认和警报

标签 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('bro', -10, true);
            } else {
                alert('Please someone has to be a bro');
            }
        }
        return true;
    }

我的测试示例之一(它失败了ReferenceError:确认未定义)...

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 或其他模块。而且这是由开发人员编写的,现在我正在接管。

最佳答案

It fails ReferenceError: confirm is not defined

在上面的代码中 if (confirm('Do you Bro?')) 使用 letconfirm = {confirm: sinon.spy()} 作为函数。这应该抛出TypeError:confirm不是一个函数:

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

foo(); // TypeError: confirm is not a function

因此可以肯定地得出结论,不是 checkIfBroRec.saveRecord({ record: record }) 导致代码到达 if (confirm('Do you Bro?') ) 因此问题必定出在:

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

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

关于javascript - 在这个 sinon.spy mocha 示例中是否有一种简单的方法来更改确认和警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40225543/

相关文章:

JavaScript 函数破坏了我的页面跳转?

javascript - 如何使用 AJAX 将 JavaScript 数组发送到 PHP?

javascript - 如何在 IIFE 中测试私有(private)方法(也许通过使用反射)?

requirejs - 是否可以将 CommonJS 模块与 karma/mocha 一起使用

javascript - AngularJS 和 RequireJS 添加 Controller 来查看

Javascript - 从文件夹中获取图像

javascript 不在浏览器中生成,只是将代码打印到屏幕

visual-studio - Assert.AreEqual(expected,actual) 对于多个期望值

javascript - React 测试 componentWillReceiveProps

security - 使用 Backbone.js、Require.js 和 Laravel 的 SPA 安全性