2011-09-12 5 views
0

Google 애플리케이션은 현재 자바와 자바 측 사이의 메시지를 공유합니다. 클래스 경로에는 번들 리소스 번들로 저장되며 모든 메시지를 Json으로 반환하는 사용자 지정 컨트롤러가 있습니다. 클라이언트 측 코드는 다음과 같습니다.JAWR i18n : 메시지를 사용할 때 자바 스크립트를 테스트하는 단위

// 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이 메시지를 생성하는 방식을 바꾸는 방법에 대해 정말 기대하고있었습니다. 문자열을 읽을 때마다 "메시지"개체를 처리하는 것은 큰 오버 헤드처럼 보입니다. 아마도 JAWR은 메시지 함수의 해시 맵을 생성 할 수 있습니까? – Gromix

+0

저는 JAWR에 익숙하지 않아 _JAWR이 메시지를 생성하는 방법을 바꾸는 방법을 당신을 도울 수 없습니다. "_ 나는 당신에게 _ "당신의 현재 작업장"_ 변종을 보여주었습니다. –

+0

감사합니다. JAWR을 다르게 구성하지 않는 한이 작업을 수행해야합니다. 나는 나의 것보다 더 간결 해 보이는 당신의 선택 2)을 사용할지도 모른다. – Gromix