Все Angular зависимости должны быть forwardRefs или Jest Breaks - PullRequest
0 голосов
/ 20 июня 2020

У меня несколько неприятная проблема с Jest и Angular.

Я совершенно не знаю почему, но каждый раз, когда я пытаюсь внедрить даже простейший сервис, это вызывает шутку пожаловаться:

FAIL apps/simplescrum/src/app/app.component.spec.ts
  ● AppComponent › should create the app

    Can't resolve all parameters for HeaderComponent: (?, [object Object]).

      at syntaxError (../../../packages/compiler/src/util.ts:108:17)
      at CompileMetadataResolver._getDependenciesMetadata (../../../packages/compiler/src/metadata_resolver.ts:991:27)
      at CompileMetadataResolver._getTypeMetadata (../../../packages/compiler/src/metadata_resolver.ts:870:20)
      at CompileMetadataResolver.getNonNormalizedDirectiveMetadata (../../../packages/compiler/src/metadata_resolver.ts:375:18)
      at CompileMetadataResolver.loadDirectiveMetadata (../../../packages/compiler/src/metadata_resolver.ts:226:11)
      at ../../../packages/compiler/src/jit/compiler.ts:137:36
          at Array.forEach (<anonymous>)
      at ../../../packages/compiler/src/jit/compiler.ts:135:65
          at Array.forEach (<anonymous>)
      at JitCompiler._loadModules (../../../packages/compiler/src/jit/compiler.ts:132:71)
      at JitCompiler._compileModuleAndAllComponents (../../../packages/compiler/src/jit/compiler.ts:117:32)
      at JitCompiler.compileModuleAndAllComponentsAsync (../../../packages/compiler/src/jit/compiler.ts:69:33)
      at CompilerImpl.compileModuleAndAllComponentsAsync (../../../packages/platform-browser-dynamic/src/compiler_factory.ts:69:27)
      at TestingCompilerImpl.compileModuleAndAllComponentsAsync (../../../../packages/platform-browser-dynamic/testing/src/compiler_factory.ts:59:27)
      at TestBedViewEngine.compileComponents (../../../../packages/core/testing/src/test_bed.ts:375:27)
      at Function.TestBedViewEngine.compileComponents (../../../../packages/core/testing/src/test_bed.ts:159:25)
      at src/app/app.component.spec.ts:20:8
      at ZoneDelegate.invoke (../../node_modules/zone.js/dist/zone.js:386:30)
      at AsyncTestZoneSpec.onInvoke (../../node_modules/zone.js/dist/async-test.js:102:47)
      at ProxyZoneSpec.onInvoke (../../node_modules/zone.js/dist/proxy.js:114:43)
      at ZoneDelegate.invoke (../../node_modules/zone.js/dist/zone.js:385:36)
      at Zone.runGuarded (../../node_modules/zone.js/dist/zone.js:154:51)
      at runInTestZone (../../node_modules/zone.js/dist/async-test.js:224:33)
      at ../../node_modules/zone.js/dist/async-test.js:162:21
      at ZoneDelegate.invoke (../../node_modules/zone.js/dist/zone.js:386:30)
      at ProxyZoneSpec.onInvoke (../../node_modules/zone.js/dist/proxy.js:117:43)
      at ZoneDelegate.invoke (../../node_modules/zone.js/dist/zone.js:385:36)
      at Zone.run (../../node_modules/zone.js/dist/zone.js:143:47)

Когда моя инъекция зависимости выглядит так:

constructor(private appStateService: AppStateService,
            public breakpointService: BreakpointService) {
}

обе эти службы @Injectable({providedIn: 'root'})

Это также происходит при загрузке служб из материала angular, который говорит мне, что это, возможно, больше моя шутливая конфигурация, чем мой код.

constructor(private breakpointObserver: BreakpointObserver) {
}

Интересно, что проблем не возникает, когда я вставляю службы как forwardRefs

constructor(@Inject(forwardRef(() => BreakpointObserver)) private breakpointObserver: BreakpointObserver) {
}

У кого-нибудь есть мысли?

Репо с кодом можно найти здесь https://github.com/geometricpanda/simple-scrum

1 Ответ

2 голосов
/ 20 июня 2020

Нашел ответ здесь: https://github.com/thymikee/jest-preset-angular/issues/288

tsconfig.spe c. json

   "compilerOptions": {
+    "emitDecoratorMetadata": true,
     "outDir": "./out-tsc/spec",
...