3

"통합 테스트"("단위 테스트"또는 "UI 테스트"[일명 E2E/각도기]가 아님)를 설정하는 임무를 맡았습니다. 이 통합 테스트는 컨트롤러의 $ http POST 요청을 외부 API로 테스트하고 예상되는 응답 사례를 확인하는 것 이상을 수행하지 않습니다.

나는 이것을 시도했다 : - ngMock 없음 (직접 http 자원에 연결해야 함); - ngMock (passThrough()가 정의되지 않았기 때문에 http 리소스를 통과 할 수 없음); - 마지막으로 ngMockE2E로 시도했지만 passThrough()가 작동하지만 요청이 success() 또는 error()를 반환하지 않습니다.

나는 $httpBackend.flush()을 시도했으며 "플러시 요청이 없습니다!"라고 말했습니다. (passThrough()를 사용하고 있기 때문에 flush 함수가 필요하지 않다고 가정합니다).

나는 $rootScope.$apply()을 시도했지만 별다른 차이가 없습니다.

예상대로 작동하는 방법을 모르는 경우 각도기를 사용하지 않아도 가능합니까? 누구도 AngularJS 앱을위한 "통합 테스트"를 수행합니까? "단위 테스트"와 "E2E 테스트"가 표준 인 것처럼 보입니다. "통합 테스트"가 아닙니다.

"유닛 테스트"는 조롱 된 리소스를 사용하고 있으며 예상대로 success() 및 error()를 호출합니다.

생각/아이디어?

[편집 :] 발견 된 문제는 재스민 비동기 테스트와 관련이 있습니다. Jasmine 1.X에서는 run()과 waitsFor()를 사용해야하고, Jasmine 2.X에서는 done()을 사용할 수 있습니다 (2.X를 얻을 수는 없지만 모든 테스트를 중단했습니다). 그래서 지금은 $ http 요청에서 콜백을 받고 있지만 그것은 항상 error()가 호출됩니다. 이제 success()가 호출되지 않는 이유를 알 수 없습니다. 어떤 아이디어?

+0

'angular-mocks.js' 스크립트를 포함하지 않으면 기본'$ httpBackend'를 그대로두기 때문에 충분합니다. – Phil

+0

@ 필 힐스를 시도하면 $ http 요청의 성공/오류가 발생하지 않습니다. 테스트는 성공한 것으로 나타 났지만 (재스민에서는), 결코 발생하지 않는 성공/오류 내부의'console.log ('hello');가 있습니다. 그러나 조롱 된 $ http 요청으로 "단위 테스트"를 실행하면 바로 "hello"메시지가 나타납니다. 따라서 어떤 이유로 든 실제 요청을 수행하면 성공/오류 콜백이 실행되지 않으므로 서버에서 응답 사례를 테스트 할 수 없습니다. – BuildTester1

+0

https://github.com/yearofmoo/ngMidwayTester를 사용할 수 있습니다. 설정이 매우 쉽고 ngMock과 비슷합니다. 따라서 기본적으로 ngMock을 제외하고 ngMidwayTester로 대체하십시오. – wayne

답변

2

해결책을 찾았습니다! 내가 알아야 할 몇 가지 문제점이 있었다.

  1. 재스민 비동기 일 : $의 HTTP 요청을 할 때 콜백이 실행되기 전에, 테스트가 완료됩니다. 재스민이 expect() 문을 실행하기 전에 콜백을 기다려야합니다. Jasmine 1.5에서는 run()waitsFor()을 사용합니다. Jasmine 2.0에서는 done()을 사용합니다. 그러나 setTimeout()setInterval()은 작동하지 않습니다.

  2. 재스민 2.0 : require.js/AngularJS가있는 앱을 실행하는 경우 Jasmine은 모든 테스트를 병렬로로드합니다. 그러나 다른 테스트를 실행하기 전에 응용 프로그램이 초기 app_test.js 파일의 부트 스트랩에 있는지 확인해야합니다. 참조 : "angularAMD must be bootstrapped"섹션

  3. SSL 문제 : PhantomJS에 https:// 링크가 열려 있습니다. http:// 변형에 연결해보세요. 문제가 해결되면 SSL을 사용하여 문제가 발생한 것입니다. PhantomJS가 속성을 전달하도록 카르마 설정을 수정할 수 있습니다 (즉, --ssl-protocol=any). 또는 궁극적으로 다른 브라우저에서 테스트 해보십시오 (예 : ['Chrome', 'Firefox', 'Safari', 'IE']).

karma.conf.js 파일 :

browsers: ['PhantomJS_SSL'], 

customLaunchers: { 
    'PhantomJS_SSL': { 
    base: 'PhantomJS', 
    flags: [ 
     '--ignore-ssl-errors=true', 
     '--ssl-protocol=any', 
     '--web-security=false' 
    ] 
    } 
}, 

, 당신의 $ HTTP 요청이 호출되고 있는지 확인 요청이 컴퓨터에서 실행되고 있는지 HTTP를 볼 수 Fiddler (무료) 같은 응용 프로그램을 사용할 수 있습니다. 카르마/재스민 테스트를 실행하면 모든 요청이 표시됩니다.

+3

테스트를보고 싶습니다. – Lane