[英]qunit + mockjax: When should I call mockjaxClear in async tests?
我正在使用qunit和mockjax测试我的前端代码。 在mockjax自己的测试代码中 ,AJAX测试的结构如下所示( jsfiddle ):
var testURL = "/test/data",
testData = { a: 1, b: "c" };
asyncTest("AJAX response test", 1, function() {
$.mockjax({
url: testURL,
responseText : JSON.stringify(testData)
});
$.ajax({
url: testURL,
dataType: "json",
success: function(data) {
deepEqual(data, testData, 'AJAX response is OK');
},
complete: function() {
start();
}
});
$.mockjaxClear();
});
根据mockjax文档 :
* $.mockjaxClear()
Removes all mockjax handlers.
我不明白的是为什么在$.ajax()
调用之后mockjaxClear
调用mockjaxClear
。 问题在于它是否进行某种清理,如文档所述,该清理将在 AJAX响应到达之前运行(请参见此jsfiddle的控制台)。 对我来说,在complete
事件的处理程序中进行清理似乎更合乎逻辑。 谁能解释给我,为什么在$.ajax()
之后再调用mockjaxClear更好?
如果看一下代码,您会发现清理不会影响已经“运行”的调用。 它只是确保任何后续的$.ajax()
都将调用jQuery的原始方法,并清除其他内部状态(但同样,不影响已经挂起的“请求”)。
这可能有助于确保被测$.ajax()
调用仅发送一次(如果发送了更多调用,它们将失败,此外,将再次调用start()
方法,并将错误报告给Qunit)。
也可能只是为了保持代码干净(回调处理程序中的内容更少)。
我认为您实际上$.mockjaxClear
在测试中的任何地方运行$.mockjaxClear
。 QUnit为模块内运行的测试提供了生命周期挂钩,在这种情况下,重要的是拆卸。
http://api.qunitjs.com/module/
使用它,您的代码应该类似于
module( "myapi", {
teardown: function() {
$.mockjaxClear();
}
});
asyncTest( "sometest", function() {
// test definition
});
如果愿意,您甚至可以将模拟设置移到setup
生命周期挂钩中,以使您的实际测试代码更紧凑,并且仅关注测试本身,而不关注设置/拆卸。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.