0

我需要重构我正在开发的 wordpress 插件的整个 javascript 代码库,以便我可以对其运行单元测试,并且我正在寻找一个开始的地方。我知道我需要开始使用 MVC 框架来正确地进行单元测试,并且我想要一点“启动”。假设我有一个非常基本的 jQuery AJAX 调用,你将如何在 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'
    );
} );

任何 javascript MVC 示例都是完美的。

4

1 回答 1

4

使用 MVC 框架和拥有可测试的代码之间没有任何关联。

也没有理由认为基于非 MVC 框架的代码不能非常可测试

完全有可能将所有这些代码移动到 MVC 实现中,并得到与这个一样繁琐的测试结果。

我在您向我们展示的示例代码中看到的问题是它缺乏模块化。我不是很虔诚,但也许我们可以在这里谈谈单一责任

我在这里推荐的是为那里的所有逻辑创建隔离的方法,组织它们,将它们放入 Class 或 Utils 模块中,然后您将看到在隔离和协作中测试它们是多么容易。

一旦实现了这一点,您就可以迁移到 MVC 或不迁移,但这只是因为代码的可测试性,这不是原因。

于 2012-05-29T11:48:17.470 回答