如何在主干网、ember或任何JavaScriptMVC框架中编写一个简单的jQueryAjax调用的等效代码,以便对其进行单元测试

如何在主干网、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

我需要重构我正在开发的wordpress插件的整个javascript代码库,以便对其运行单元测试,我正在寻找一个起点。我知道我需要开始使用MVC框架来正确地进行单元测试,我想要一点“启动”。假设我有一个非常基本的jqueryajax调用,那么如何在MVC框架中编写相同的代码,从而使其可以进行单元测试

// 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相反。你上面链接的那本书看起来不错,但看起来并不流行:)(我没有看到任何关于西农的茉莉花的参考资料)。。不管怎样,如果你只是从这一切开始,你会读到的任何东西都是值得推荐的,就从任何事情开始吧。我在会议上听说过茉莉花。好的,谢谢你的帮助,我将记录我自己,并尝试将所有的部分放在一起开始我的重构:)