2013-05-24 2 views
2

인턴 테스트 방법에 문제가 생겨서 jQuery로 AJAX 호출을 사용하는 유닛을 테스트하려고 시도했습니다. Intern이 WebDriver 서버 (이 경우 phantomjs --webdriver=8910)에 테스트 클라이언트를 제공하기 때문에 결국 localhost:9000에서 실행되는 테스트가 끝납니다. 이것은 명백하게 동일 출처 정책 문제를 야기합니다.인턴 AJAX 단위 테스트

나는이 문제를 해결하고 도메인 간 요청을 할 수 있지만 일단 인증 쿠키가 필요하면 분명히 우리의 백엔드가 localhost에 대한 쿠키를 설정하지 않기 때문에 차단됩니다. 따라서 쿠키에 대한 액세스 권한이 없습니다.

나는 여러 가지 순열 우리의 서버를 가리 키도록 proxyUrl 옵션을 변경하려고했지만, 지금까지 아무 일 없다 :

https://my.server.com/ 
https://my.server.com/js/ 
https://my.server.com/js/intern/ 
https://my.server.com/js/intern/client.html 
https://my.server.com/js/intern/client.html?config=tests/intern 

은 인턴에 서버를 알려줍니다 것을 내가 발견 한 WebDriver 로그를보고 부하 http://localhost:9000/__intern/client.html?config=.... 나는 proxyUrlhttps://my.server.com/js/으로 설정하고 심볼릭 링크 __internintern으로 설정하려고했지만 테스트가 실행 중이 지 않거나 runner.js으로 다시보고되지 않습니다. 나는이 방법을 실행할 PhantomJS 로그는 다음과 같이 보일 :

[DEBUG - 2013-05-24T15:17:50.930Z] SessionReqHand - _postUrlCommand - Session '194ff0a0-c485-11e2-9c64-9986b0c95ae1' is about to load URL: https://my.server.com/js/__intern/client.html?config=tests%2Fintern&sessionId=194ff0a0-c485-11e2-9c64-9986b0c95ae1&reporters=webdriver 
[DEBUG - 2013-05-24T15:17:50.943Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: true 
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _oneShotCallback - onLoadFinished 
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - onLoadFinished: success 
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: false 
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _resetOneShotCallbacksDecorator 
[DEBUG - 2013-05-24T15:17:51.052Z] SessionReqHand - _SuccessHandler - status: success 
[DEBUG - 2013-05-24T15:17:51.184Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - page.onConsoleMessage - Tests complete 

테스트 러너는 응답과 proxyUrl이 인턴 실행 프록시 서버에서 지적되지 않기 때문에 결코, 그러나, 테스트 결과를받지 않습니다.

편집 5/28

그것은이 많은 이상적으로 테스트 스택 오히려 코드베이스를 강요하는 것보다, 코드베이스에 맞게 구성해야하지만 (백 엔드 수정을 통해 우회 할 수 있다는 것을 언급 할 가치가 준수하기 위해),하지만이 경우 옵션이라고는 말할 수 없습니다.

이상적으로는 인턴이 지정된 URL에서 client.html을로드하도록 구성 할 수 있으며 JSONP와 같은 일부 교차 원점 호환성 방법을 통해 localhost:9000 프록시에 대한 리포터 POST를 가질 수 있습니다. 나는 합리적인 대안을 찾을 수 없기 때문에 인턴이 AJAX를 통해 백 엔드와 통신하는 단위 테스트를 완전히 지원하지는 않는 것처럼 보입니다.

답변

2

URL을 다른 서버를 가리 키도록 Intern 프록시로 변경하는 경우 실제로는 localhost:9000에서 실행되는 Intern 서버로 다시 프록시하는 서버 여야합니다. Intern 디렉토리에 대한 심볼릭 링크가있는 일반 웹 서버 일 수는 없습니다.

이 작업을 수행하는 것은 다른 백엔드 (CouchDB, Apache, Node.js 등)에 대한 다른 종류의 프록시와 동일합니다. nginx의 경우 HttpProxyModule ~ proxy_pass http://localhost:9000/;을 사용하는 것을 의미합니다. Apache의 경우 mod_proxyProxyPass/http://localhost:9000/. 인턴 서버가 자바 스크립트 (예 : __intern으로 프록시 전용)를 제공하도록 허용하지 않으면 코드 커버리지 데이터를받지 않으므로 테스트하려는 서비스 URL을 제외한 모든 것을 프록시하는 것이 가장 좋습니다.

위키 페이지 Using Intern to unit test Ajax calls에서 웹 서비스 테스트를위한 인턴에 대한 자세한 정보를 찾을 수 있습니다.

+0

고마워!이전에 역방향 프록시를 사용하는 것에 대해 생각하지 않았습니다. 왜냐하면 우리는 이미 백 엔드를 위해 하나를 가지고 있기 때문에 그것이 방해가 될 것이라고 생각했지만 문제가되지 않아야합니다. – coreyschram