jquery - 如何对ajax调用进行单元测试

标签 jquery ajax unit-testing js-test-driver

我是为 JavaScript 创建单元测试的新手。在我的单元测试中,我不断收到“AssertError:预期“ok”,但[未定义] “结果。有人能教我如何对 ajax 调用进行单元测试吗?谢谢。顺便说一句,我正在使用 JsTestDriver 来测试我的单元测试。

这是我的源文件:

function getReport(m, y)
{
$.ajax({
    url: "url/to",
    data: {
        m:m,
        y:y
    },
    dataType: 'json',
    success:function (res) {
            return res;

    }       
});

}

这是我的测试文件:

TestCase("Report", {

  "test get report": function () {
 assertEquals("ok", getReport(1, 2015));
}   
});

最佳答案

在我们进一步讨论您的问题之前,让我先问我的问题:为什么需要测试 Ajax 请求?一般来说,通过单元测试,您不会测试供应商代码和功能,例如第 3 方函数、API、网络问题、数据库等。专注于对您的团队和您创建的代码进行单元测试。让供应商测试他们的代码。在这个特定的示例中,jQuery Ajax 应该由 jQuery 提供者而不是您来测试。

您不应该测试 Ajax 的另一个原因是:测试将从单元测试转移到集成测试,因为您测试后端从服务器返回正确的值。也就是说,您测试客户端+服务器代码如何协同工作。

正确的方法是使用模拟、 spy 或 stub 将单元测试与外部调用隔离。如果您不确定它们是什么 - 请在互联网上搜索。所有流行的单元测试框架和库都支持并提供简单的使用方法。

无论如何,您可能想测试它,为此请访问相关帖子:Unit testing AJAX requests with QUnit

祝您单元测试顺利!

关于jquery - 如何对ajax调用进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121808/

相关文章:

javascript - DataTables 未在 RequireJS 项目中正确初始化

php - 根据动态下拉框填充文本框

javascript - Document.write() 在 WordPress header 中不起作用

c# - 子类的单元测试

java - 请求时的简单模拟行为

c# - 依赖私有(private)方法测试公共(public)方法的方法

javascript - JSON 到 ajax 中的 HTML 表

php - 编码为 json 对象并通过 ajax 发送

jquery - 如何使用 jQuery 根据类和 id 更改 CSS

javascript - prototype.js Ajax.PeriodicalUpdater 调用自己的函数更新