2011-09-12 4 views
0

私たちのアプリケーションは現在、JavaとJavaScriptの間でメッセージを共有しています。それらはリソースバンドルとしてクラスパスに格納されており、すべてのメッセージをJsonとして返すカスタムコントローラがあります。クライアント側のコードは次のようになります。JAWR i18n:メッセージを使用するときのJavaScriptのユニットテスト

// This calls the controller to get all the messages 
var messages = MessageBundle(); 
var text = messages.get('my.message', 1); 

これは、私たちの単体テストで "メッセージ"を模倣することができるためです。


私たちはすでに他のもののためにそれを使用するので、このためにJAWRの使用を開始します。問題はJAWR generates the following Javascript object次のとおりです。

var text = messages.my.message(1); 

これは、ユニットテストはまた、右ネストされたオブジェクトのグローバル「メッセージ」変数を定義しない限り、ユニットはもうをテストすることができないコードを意味します。これを回避する方法はありますか?このユニットをテスト可能にするためにJAWRを拡張する方法はありますか?

現在の周りの私の仕事は次のとおりです。任意のアイデアについて

function messages() { 
    var args = Array.prototype.slice.call(arguments); 
    var messageId = args.shift(); 
    var messageFunc = window.messages;   
    messageId.split('.').forEach(function(part) { 
     messageFunc = messageFunc[part]; 
    }); 
    return messageFunc(args); 
} 

// Same syntax as the old one, but uses the JAWR object behind the scenes 
// This function is easy to mock for a unit test 
var text = messages('my.message', 1); 

ありがとう!

答えて

0

多分次のサンプルがお手伝いします。

1)

function messagesTester(funcPath,id) { 
    var args=funcPath.split('.'),root=window.messages; 
    for(var i=0;i<args.length;i++)root=root[args[i]]; 
    return root(id); 
    // or if more that one parameter for *func*, then, for example: 
    // return root.apply(null,Array.prototype.slice(arguments,1)); 
} 
var text = messagesTester('my.message',1); 

2)

function messagesTester(funcPath) { 
    var args=funcPath.split('.'),root=window.messages; 
    for(var i=0;i<args.length;i++)root=root[args[i]]; 
    return root; 
} 
// var text = messagesTester('my.message')(/*arguments list*/); 
var text = messagesTester('my.message')(1); 
+0

おかげ。私がうまく理解していれば、これらの異なる実装方法が回避策ですか?私は#2がIDとして最初のものを使用し、残りをパラメータとして使用するのではなく、引数をどのように分離するのが好きです。 JAWRがメッセージを生成する方法を変える方法があるとは思っていました。文字列を読み取るたびに、 "messages"オブジェクトを処理するのは大きなオーバーヘッドのようです。たぶん、JAWRはメッセージ関数のハッシュマップを生成できますか? – Gromix

+0

私はJAWRに慣れていないので、_ "JAWRがメッセージを生成する方法を変える方法"を手伝ってはいけません。私はあなたのために、あなたの現在のワークラウンド_のいくつかのバリエーションを示しました。 –

+0

JAWRを別の方法で設定する方法がない限り、これを行う必要があります。私はあなたの選択肢2)を使用するかもしれないが、私よりも簡潔に見える、歓声。 – Gromix

関連する問題