$.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);
}
}
});
我正在尝试使用Mocha,Sinon和Chai测试以上代码。特别是说“成功”的行。我已经测试过通过将存根作为回调并断言它已被调用。
现在我想测试相反的情况,即如果回调不是函数。我可以传递字符串或数组或其他东西,但是现在有了断言它没有被调用的方法,因为您不能调用字符串,也不能存根它。
为了使isFunction为false,我无法传递存根。有任何想法吗?
更新:
我已经将ajax存根了。我正在专门研究线的成功。如何测试将非函数作为回调传递时没有尝试调用它?
答案 0 :(得分:2)
通过对回调进行存根测试,您正在测试jQuery的ajax
方法是否有效。但是我怀疑这不是被测单元。另外,对回调进行存根也不会阻止网络调用,您可能不想在测试中发生。
相反,您应该将ajax()
存根。然后,您可以断言它已被调用以及传递给函数的内容–您可以使用包含指向函数的success
属性的对象来测试它是否被调用。
Sinon docs中有一个示例:
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' }));
});