0

作業中の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'
    );
} );

javascriptMVCの例ならどれでも完璧です。

4

1 に答える 1

4

MVCフレームワークの使用とテスト可能なコードの使用との間に関連性はありません。

MVCフレームワークに基づかないコードをあまりテストできないと考える理由もありません。

このすべてのコードをMVC実装に移動することは完全に可能であり、これと同じくらいテストするのが面倒な結果になります。

あなたが私たちに示したサンプルコードで私が見ている問題は、それがモジュール性に欠けているということです。私はあまり宗教的ではありませんが、ここで単一責任について話すことができるかもしれません。

ここで私がお勧めするのは、そこにあるすべてのロジックに対して分離されたメソッドを作成し、それらを整理し、それらをClassまたはUtilsモジュールに配置することです。そうすれば、日射量とコラボレーションでそれらをテストするのがいかに簡単かがわかります。

これを達成したら、MVCに移行するかどうかを決めることができますが、それはコードのテスト可能性が理由ではないからです。

于 2012-05-29T11:48:17.470 に答える