使用JsTestDriver未从Mockjax获得响应
Not getting a response from Mockjax with JsTestDriver
我正试图使用mockjax来模拟我的jQueryAjax调用;然而,我找不到任何关于如何有效测试回应的好的、有效的例子。
以下代码是jQuery.Ajax对象的一个简单包装器。它是有效的,但我想写一些测试围绕这样:
Ajax包装
if (!namespace){
var namespace = {};
}
namespace.Ajax = (function($){
function defaultError(xhr, err, msg){
if (typeof console !== 'undefined'){
var log = console.error;
if (!log) {
log = console.log;
}
log("==========================================");
log("An error occurred with the request.");
log("- Status Code: " + xhr.status);
log("- Status Text: " + xhr.statusText);
log("- Response Text: " + xhr.responseText);
log("- Message: " + msg);
log("==========================================");
}
}
function getData(url, data, successCallback, errorCallback){
if (!errorCallback){
errorCallback = defaultError;
}
$.ajax({
url: url
, data: data
, success: successCallback
, error: errorCallback
});
}
function postData(url, data, successCallback, errorCallback){
if (!errorCallback){
errorCallback = defaultLog;
}
$.ajax({
type: "POST"
, url: url
, data: data
, success: successCallback
, error: errorCallback
});
}
return {
getData : getData
, postData: postData
}
}(jQuery));
我对getData进行了以下JsTestDriver测试。
测试等级
TestCase("Ajax Object Test Fixture", {
"test Calling getData Should Return content" : function(){
var results;
var obj = namespace.Ajax;
$.mockjax({
url: "/test"
, responseTime: 1
, responseText: "success"
});
obj.getData("/test"
, null
, function(data){results = data; });
setTimeout(function(){assertEquals("'success' Should be Returned.", "success1", results);}, 500);
}
});
assertEquals函数在本例中应该返回false,因为我期望"success1",但在整个代码中,我都试图将值设置为"success"。我希望这个测试失败,这样我就知道它在起作用。尽管如此,测试还是成功了。我曾尝试将successCallback函数设置为results = "success"
,但它仍然不会"失败"测试。
我如何设置此测试以确保返回模拟响应,从而不会得到当前的假阳性?
我认为这里的问题是setTimeout导致测试用例在不运行任何断言的情况下退出,并且assertEquals在一个单独的"线程"中被调用。
这里需要的是一个异步测试用例:
(function(namespace){
var testcase = AsyncTestCase('AjaxObjectTest');
/**
* Each asynchronous testcase method receives a queue object.
*/
testcase.prototype.testGetData = function(queue) {
var results;
var obj = namespace.Ajax;
$.mockjax({
url: "/test",
responseTime: 1,
responseText: "success"});
// Here we pass a function to the queue call method, which will
// pause the testcase execution until all callback methods have been
// called, or until it expires.
queue.call('Expecting a callback', function(callbacks){
// The callbacks object is a factory for creating required
// callback functions. This queued function will wait until it
// has been called. You can specify the number of times you require
// it to be called as the second parameter of the add method.
var handler = callbacks.add(function(data){
assertEquals("'success' Should be Returned.", "success1", data);
});
obj.getData("/test", null, handler);
}
});
})(namespace);
在一个测试中,您可以有任意数量的队列调用,并且只有在上一个测试完成后,所有的队列调用才会运行。您可以在JsTestDriver项目wiki中阅读更多关于异步测试用例的信息。希望能有所帮助!
哦,差点忘了!为了避免在没有断言的情况下通过测试,可以使用expectAsserts
函数:
testcase.prototype.testSomeStuff = function(){
expectAsserts(2);
// Test your stuff here
};
相关文章:
- 如何将getJson的响应保存在全局变量中
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 使用angularjs向浏览器发送servlet响应(下载功能)
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 为什么可以't我使用了AJAX响应的一部分
- 响应动画手风琴不工作
- 如何从SeleniumWebdriver获取异步Javascript响应
- Ajax调用在Firefox中不会自动响应
- 可以在响应时隐藏iphone上的“播放”按钮以进行视频播放
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- 如何在 JavaScript 和 HTML 中更改对输入框的提示响应
- IIS动态HTTP响应标头
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Ajax响应转换
- 使Intro.js工具提示响应
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- MockJAX没有响应CasperJS
- Mockjax响应不起作用
- 使用JsTestDriver未从Mockjax获得响应