私たちのアプリケーションは現在、Java 側と Javascript 側の間でメッセージを共有しています。これらはリソース バンドルとしてクラス パスに格納され、すべてのメッセージを Json として返すカスタム コントローラーがあります。クライアント側のコードは次のようになります。
// This calls the controller to get all the messages
var messages = MessageBundle();
var text = messages.get('my.message', 1);
単体テストで「メッセージ」をモックできるので、これは素晴らしいことです。
JAWR はすでに他の用途で使用しているため、この目的でJAWRを使用したいと考えています。問題は、JAWRが次の Javascript オブジェクトを生成することです。
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);
アイデアをありがとう!