繁体   English   中英

qunit + mockjax:何时应在异步测试中调用mockjaxClear?

[英]qunit + mockjax: When should I call mockjaxClear in async tests?

我正在使用qunitmockjax测试我的前端代码。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM