Javascript 是否可以存根函数以外的内容?

Javascript 是否可以存根函数以外的内容?,javascript,unit-testing,mocha.js,sinon,chai,Javascript,Unit Testing,Mocha.js,Sinon,Chai,我正在尝试使用Mocha、Sinon和Chai测试上述代码。特别是写着“成功”的那句话。我已经通过将存根作为回调传递并断言调用了它来测试了 现在我想测试相反的情况,如果回调不是函数。我可以传递一个字符串、数组或其他东西,但现在有一种方法可以断言它没有被调用,因为你不能调用字符串,也不能存根它 为了使isFunction为false,我不能传递存根。有什么想法吗 更新: 我已经打过阿贾克斯了。我特别关注生产线的成功。我如何测试当一个非函数作为回调传递时,是否没有尝试调用它?通过截取回调,您正在测试

我正在尝试使用Mocha、Sinon和Chai测试上述代码。特别是写着“成功”的那句话。我已经通过将存根作为回调传递并断言调用了它来测试了

现在我想测试相反的情况,如果回调不是函数。我可以传递一个字符串、数组或其他东西,但现在有一种方法可以断言它没有被调用,因为你不能调用字符串,也不能存根它

为了使isFunction为false,我不能传递存根。有什么想法吗

更新:


我已经打过阿贾克斯了。我特别关注生产线的成功。我如何测试当一个非函数作为回调传递时,是否没有尝试调用它?

通过截取回调,您正在测试jQuery的
ajax
方法是否有效。但我怀疑这不是正在测试的单元。此外,中断回调不会阻止网络调用,这可能是您不希望在测试中发生的

相反,您应该使用stub
ajax()
。然后,您可以断言调用了它以及传递给函数的内容—您可以测试调用它的对象是否包含指向函数的
success
属性

下面是一个例子:

$.ajax({
    type: "GET",
    cache: false,
    url: serviceURL + campaignId + "/question/" + questionId + "?showDraft=" 
        + showDraft,
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        if ($.isFunction(callback)) {
            callback(data);
        }
    }
});
after(function () {
    jQuery.ajax.restore();
});

it('makes a GET request for todo items', function () {
    sinon.replace(jQuery, 'ajax', sinon.fake());
    getTodos(42, sinon.fake());

    // here you can test what was passed to the ajax including the type of 
    // the success handler
    assert(jQuery.ajax.calledWithMatch({ url: '/todo/42/items' }));
});