如何为 ajax 个调用进行单元测试
How to make a unit test for ajax calls
我是为 JavaScript 创建单元测试的新手。在我的单元测试中,我一直 "AssertError: expected "ok" 但 [undefined]
” 结果。谁能教我如何对 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 请求?通常,通过单元测试,您不会测试供应商代码和功能,例如第三方功能、API、网络问题、数据库等。专注于对您的团队和您创建的代码进行单元测试。让供应商测试他们的代码。在此特定示例中,jQuery Ajax 应由 jQuery 提供者而不是您进行测试。
还有另一个你不应该测试 Ajax 的原因:测试将从单元测试转移到集成测试,因为你测试后端 returns 来自服务器的正确值。也就是说,您测试客户端+服务器代码如何协同工作。
正确的做法是使用模拟、间谍或存根将单元测试与外部调用隔离开来。如果您不确定它们是什么 - 请在互联网上搜索。所有流行的单元测试框架和库都支持并提供简单的使用方法。
无论如何你可能都想测试一下,为此请访问相关的 post:Unit testing AJAX requests with QUnit
祝单元测试顺利!
我是为 JavaScript 创建单元测试的新手。在我的单元测试中,我一直 "AssertError: expected "ok" 但 [undefined] ” 结果。谁能教我如何对 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 请求?通常,通过单元测试,您不会测试供应商代码和功能,例如第三方功能、API、网络问题、数据库等。专注于对您的团队和您创建的代码进行单元测试。让供应商测试他们的代码。在此特定示例中,jQuery Ajax 应由 jQuery 提供者而不是您进行测试。
还有另一个你不应该测试 Ajax 的原因:测试将从单元测试转移到集成测试,因为你测试后端 returns 来自服务器的正确值。也就是说,您测试客户端+服务器代码如何协同工作。
正确的做法是使用模拟、间谍或存根将单元测试与外部调用隔离开来。如果您不确定它们是什么 - 请在互联网上搜索。所有流行的单元测试框架和库都支持并提供简单的使用方法。
无论如何你可能都想测试一下,为此请访问相关的 post:Unit testing AJAX requests with QUnit
祝单元测试顺利!