私たちのアプリケーションは現在、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);
ありがとう!
おかげ。私がうまく理解していれば、これらの異なる実装方法が回避策ですか?私は#2がIDとして最初のものを使用し、残りをパラメータとして使用するのではなく、引数をどのように分離するのが好きです。 JAWRがメッセージを生成する方法を変える方法があるとは思っていました。文字列を読み取るたびに、 "messages"オブジェクトを処理するのは大きなオーバーヘッドのようです。たぶん、JAWRはメッセージ関数のハッシュマップを生成できますか? – Gromix
私はJAWRに慣れていないので、_ "JAWRがメッセージを生成する方法を変える方法"を手伝ってはいけません。私はあなたのために、あなたの現在のワークラウンド_のいくつかのバリエーションを示しました。 –
JAWRを別の方法で設定する方法がない限り、これを行う必要があります。私はあなたの選択肢2)を使用するかもしれないが、私よりも簡潔に見える、歓声。 – Gromix