각도 4 단위 테스트 오류`TypeError : ctor is not a constructor`


90

내 경로 확인자를 테스트하려고 시도하고 테스트 TypeError: ctor is not a constructor하는 동안 typescript 컴파일 시간에 오류가 발생하는 이유를 알지 못했습니다.

TypeError: ctor is not a constructor
TypeError: ctor is not a constructor
    at _createClass (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42355:26)
    at _createProviderInstance$1 (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42330:26)
    at resolveNgModuleDep (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42315:17)
    at _createClass (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42362:26)
    at _createProviderInstance$1 (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42330:26)
    at resolveNgModuleDep (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42315:17)
    at NgModuleRef_.webpackJsonp../node_modules/@angular/core/@angular/core.es5.js.NgModuleRef_.get (http://localhost:9877/_karma_webpack_/vendor.bundle.js:43401:16)
    at TestBed.webpackJsonp../node_modules/@angular/core/@angular/core/testing.es5.js.TestBed.get (http://localhost:9877/_karma_webpack_/vendor.bundle.js:48412:47)
    at http://localhost:9877/_karma_webpack_/vendor.bundle.js:48418:61
    at Array.map (native)

당신은 NG2 부트 스트랩을 사용하는
시비 라즈

예. 하지만 경로 확인자를 테스트하고 있습니다. 내 경로 해결을 초래하는 것은도 있다는 것입니다하지 HTML이나 CSS
Aniruddha 다스

답변:


270

공급자 선언의 오류 일 수 있습니다.

공급자를 모의하고 useValue 대신 useClass를 사용하려고하면 "TypeError : ctor is not a constructor"오류가 발생합니다.

다음은 오류를 발생시키는 예입니다.

providers: [{provide: OrderService, useClass: new OrderServiceMock()}]

올바른 선언은 다음과 같습니다.

providers: [{provide: OrderService, useValue: new OrderServiceMock()}]

4
당신은 내 일 저장
래쉬 미 쿠마리을

2
오 고마워요. 너무 오래 쳐다봤을 텐데요.
Michael Guthrie

1
글쎄, 당신은 무엇을 알고 있습니다. 이 실수를 한 것은 처음이 아닙니다. 이미 답변을 찬성했습니다!
Kildareflare

내가 { provide: httpTestingControllerToken, useClass: HttpTestingController },선언 하는 동안이 오류가 발생합니다 const httpTestingControllerToken = new InjectionToken<HttpTestingController>('httpTestingControllerToken');. 이것은 사용되지 않는 TestBed.get. 어떤 아이디어?
lealceldeiro

2

AOT로 앱을 만들 때 똑같은 메시지를 보냈습니다.

내 문제는 @abahet이 제안한 것처럼 공급자와 관련이 없습니다.

AOT와 호환되지 않는 새 라이브러리를 설정했기 때문입니다 (그리고 공급자도 없었습니다). 문제의 도서관에 있었다 수출 (이 경우, 구성 요소 및 파이프에서) 모듈에서 가져온 것 (나는 타이프 라이터 수출, 각도 모듈에서 안 하나에 대해서 이야기하고).


2

Firebase Universal Starter 프로젝트에서 Firebase와 함께 Angular Universal 에이 문제가 발생했습니다. 스택 오버플로에 대한 모든 잠재적 수정이 도움이되지 않았기 때문에 거의 희망을 잃었습니다. 그래서 다음을 수행했습니다.

  1. https://www.npmjs.com/package/npm-check-updates로 모든 npm 패키지 업데이트
  2. node_modules 및 .package-lock.json을 제거하고 다시 설치했습니다.
  3. 변경된 API로 인한 모든 오류 수정
  4. 이제 작동했습니다 :-)

나는 어떤 패키지가 오류를 일으켰는지 알지 못했지만 알아내는 한 가지 방법은 모듈을 하나씩 제거하는 MockAppModule을 만드는 것입니다. 결국 문제가있는 사람을 찾을 수 있습니다. 하지만 제 경우에는 버그가있는 패키지 중 하나가 업데이트되거나 무언가가 업데이트 되었기 때문에 운이 좋았습니다.


1

세 번째 가능성은 다른 모듈을 포함하는 모듈이 있고 다른 모듈을 내 보내지 않았습니다 (Typescript 말하기).


1

AOT가 활성화 된 상태에서도이 문제가 발생했습니다. 새 서비스 파일을 추가했습니다. 컴파일러를 다시 시작했는데 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.