如何在主干网、ember或任何JavaScriptMVC框架中编写一个简单的jQueryAjax调用的等效代码,以便对其进行单元测试
我需要重构我正在开发的wordpress插件的整个javascript代码库,以便对其运行单元测试,我正在寻找一个起点。我知道我需要开始使用MVC框架来正确地进行单元测试,我想要一点“启动”。假设我有一个非常基本的jqueryajax调用,那么如何在MVC框架中编写相同的代码,从而使其可以进行单元测试如何在主干网、ember或任何JavaScriptMVC框架中编写一个简单的jQueryAjax调用的等效代码,以便对其进行单元测试,javascript,jquery,unit-testing,backbone.js,ember.js,Javascript,Jquery,Unit Testing,Backbone.js,Ember.js,我需要重构我正在开发的wordpress插件的整个javascript代码库,以便对其运行单元测试,我正在寻找一个起点。我知道我需要开始使用MVC框架来正确地进行单元测试,我想要一点“启动”。假设我有一个非常基本的jqueryajax调用,那么如何在MVC框架中编写相同的代码,从而使其可以进行单元测试 // Refreshes the multiselect with data from facebook. $( '.ai1ec-facebook-refresh-multiselect' ).c
// Refreshes the multiselect with data from facebook.
$( '.ai1ec-facebook-refresh-multiselect' ).click( function( e ) {
e.preventDefault();
// Find the spinner and show it
$( this ).closest( '.ai1ec-facebook-multiselect-title-wrapper' )
.find( '.ajax-loading' )
.css( 'visibility', 'visible' );
var type = $( this ).closest( '.ai1ec-facebook-multiselect-container' ).data( 'type' );
var that = this;
var data = {
"action" : 'ai1ec_refresh_facebook_objects',
"ai1ec_type" : type
}
$.post(
ajaxurl,
data,
function( response ) {
$( that ).closest( '.ai1ec-facebook-multiselect-title-wrapper' )
.find( '.ajax-loading' )
.css( 'visibility', 'hidden' );
if ( response.errors === true ) {
var alert = AI1EC_UTILS.make_alert( response.error_messages.join( '<br/>'), 'error' );
$( '#alerts' ).append( $alert );
return;
}
$( ' .ai1ec-facebook-multiselect-container[data-type=' + type + '] .ai1ec-facebook-multiselect ').replaceWith( response.html );
var $ok_alert = AI1EC_UTILS.make_alert( response.message, 'success' );
$( '#alerts' ).append( $ok_alert );
},
'json'
);
} );
//使用来自facebook的数据刷新multiselect。
$('.ai1ec facebook刷新multiselect')。单击(函数(e){
e、 预防默认值();
//找到微调器并显示它
$(this).closest(“.ai1ec facebook multiselect标题包装器”)
.find(“.ajax加载”)
.css(‘可见性’、‘可见’);
变量类型=$(this).closest('.ai1ec facebook multiselect container')。数据('type');
var=这个;
风险值数据={
“操作”:“ai1ec\u刷新\u facebook\u对象”,
“ai1ec_类型”:类型
}
$邮政(
ajaxurl,
数据,
功能(响应){
$(即).closest(“.ai1ec facebook multiselect标题包装器”)
.find(“.ajax加载”)
.css(‘可见性’、‘隐藏’);
如果(response.errors==true){
var alert=AI1EC_UTILS.make_alert(response.error_messages.join(“
”),“error”);
$('#警报')。追加($alert);
返回;
}
$('.ai1ec facebook multiselect container[data type='+type+'].ai1ec facebook multiselect').replaceWith(response.html);
var$ok_alert=AI1EC_UTILS.make_alert(response.message,'success');
$('#警报')。追加($ok#U警报);
},
“json”
);
} );
任何javascript MVC示例都是完美的。使用MVC框架和拥有可测试代码之间没有任何关联 也没有理由认为基于非MVC框架的代码不能很好地进行测试 完全可以将所有这些代码移动到MVC实现中,并产生与此一样乏味的测试结果 我在您向我们展示的示例代码中看到的问题是,它缺乏模块性。我不是很虔诚,但也许我们可以在这里讨论单一责任 我在这里建议为所有逻辑创建独立的方法,组织它们,将它们放入一个类或Utils模块中,然后您将看到在独立和协作中测试它们是多么容易
一旦您实现了这一点,您就可以转移到MVC或不转移到MVC,但这仅仅是因为代码的可测试性不是一个原因 使用MVC框架和拥有可测试代码之间没有任何关联 也没有理由认为基于非MVC框架的代码不能很好地进行测试 完全可以将所有这些代码移动到MVC实现中,并产生与此一样乏味的测试结果 我在您向我们展示的示例代码中看到的问题是,它缺乏模块性。我不是很虔诚,但也许我们可以在这里讨论单一责任 我在这里建议为所有逻辑创建独立的方法,组织它们,将它们放入一个类或Utils模块中,然后您将看到在独立和协作中测试它们是多么容易
一旦您实现了这一点,您就可以转移到MVC或不转移到MVC,但这仅仅是因为代码的可测试性不是一个原因 感谢你的回答,我最近参加了一个会议,在意大利的jsDays,他们告诉我要进行适当的测试并帮助模块化代码,你必须使用MVC framewrok,因此我的问题。你能建议我从哪里开始阅读javascript中的uit测试吗?我对PHP中的uit测试很熟悉,但我发现JS中的建模类有点难。我也发现了这本书,给你看了吗?使用MVC框架会迫使您建立一个最小的组织,但是最小。不是每种情况下,MVC框架都是有帮助的,而且如果程序员没有天生的组织精神,不管有没有MVC,最终都会搞得一团糟。。即使是MVC最糟糕的情况,如果你的动作与MVC相反。你上面链接的那本书看起来不错,但看起来并不流行:)(我没有看到任何关于西农的茉莉花的参考资料)。。不管怎样,如果你只是从这一切开始,你会读到的任何东西都是值得推荐的,就从任何事情开始吧。我在会议上听说过茉莉花。好的,谢谢你的帮助,我将记录我自己,并尝试把所有的部分放在一起开始我的重构:)谢谢你的回答,我最近在意大利参加了一个会议,在那里他们告诉我,要进行适当的测试并帮助模块化代码,你必须使用MVC框架,因此我的问题。你能建议我从哪里开始阅读javascript中的uit测试吗?我对PHP中的uit测试很熟悉,但我发现JS中的建模类有点难。我也发现了这本书,给你看了吗?使用MVC框架会迫使您建立一个最小的组织,但是最小。不是每种情况下,MVC框架都是有帮助的,而且如果程序员没有天生的组织精神,不管有没有MVC,最终都会搞得一团糟。。即使是MVC最糟糕的情况,如果你的动作与MVC相反。你上面链接的那本书看起来不错,但看起来并不流行:)(我没有看到任何关于西农的茉莉花的参考资料)。。不管怎样,如果你只是从这一切开始,你会读到的任何东西都是值得推荐的,就从任何事情开始吧。我在会议上听说过茉莉花。好的,谢谢你的帮助,我将记录我自己,并尝试将所有的部分放在一起开始我的重构:)