Qun ajax上的Qunitunit testing错误

我已经为ajax suing Qunit编写了unit testing,但是得到的错误就像

Error: assertion outside test context, was .success@http://test.loc/assets/test/widget-add-or-edit-test.js:227 b.Callbacks/c@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3 b.Callbacks/p.fireWith@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3 k@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:5 .send/r@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:5 Source: http://code.jquery.com/qunit/qunit-1.11.0.js:899 

我的测试代码是

 test( "Widget.updateAxisTypeAjax x", function() { stop(); Widget.updateAxisTypeAjax( { axis : 'x' , x_id : 179, y_id : 175 } ,{ success : function( response ){ ok( true, "updateAxisTypeAjax Success PASS!"); equal( typeof response , "object" , "updateAxisTypeAjax response is json valid object !" ); equal( typeof response == "object" && ( "average" in response ) && ("is_datetime" in response) , true , "updateAxisTypeAjax average check PASS !" ); } , complete : function(){ ok(true, "updateAxisTypeAjax completed PASS!"); start(); } }); }); 

Widget.updateAxisTypeAjax

 Widget.updateAxisTypeAjax = function( data_obj, callbacks ){ data_obj = jQuery.extend( data_obj ,{ action : 'update_axis' }); Widget.ajax( 5 ) .data( data_obj ) .callbacks( callbacks ) .fire(); } 

Widget.ajax是:

 var Widget = Widget || {} ; function _WidgetAjax( type ){ var loader = $('#series_loader'); this.ajaxUrl = '/dashboard/charts/ajax/' + ( type || 1 ) ; this.ajaxSettings = { url: this.ajaxUrl , type:"GET", data :{} , complete : function(){ // always loader.hide(); } }; // show ajax loading loader.show(); this.data = function( data ){ jQuery.extend( this.ajaxSettings, { data: data } ); return this; } this.callbacks = function( callbacks ){ jQuery.extend( this.ajaxSettings, callbacks || {} ); return this; } this.success = function( func ){ if ( jQuery.isFunction( func ) ){ jQuery.extend( this.ajaxSettings, { success: func } ); } return this; }; this.fire = function(){ return $.ajax( this.ajaxSettings ); }; }; Widget.ajax = function( type ){ return new _WidgetAjax( type ); }; 

请帮我修复这个unit testing错误!

您正在测试异步函数,因此需要使用QUnit中的异步function。

而不是test你应该使用asyncTest

这是文档 。

请注意,在执行异步测试时,您必须告诉QUnit需要多少断言。

 asyncTest( "Widget.updateAxisTypeAjax x", 4, function() { stop(); Widget.updateAxisTypeAjax( { axis : 'x' , x_id : 179, y_id : 175 } ,{ success : function( response ){ ok( true, "updateAxisTypeAjax Success PASS!"); equal( typeof response , "object" , "updateAxisTypeAjax response is json valid object !" ); equal( typeof response == "object" && ( "average" in response ) && ("is_datetime" in response) , true , "updateAxisTypeAjax average check PASS !" ); } , complete : function(){ ok(true, "updateAxisTypeAjax completed PASS!"); start(); } }); }); 

应该可以工作。 这不应该太难修复!