Estamos en el proceso de migrar para usar Jest over Karma en nuestra aplicación Angular 12 y estamos recibiendo un error generalizado en nuestros archivos de especificaciones que usan Auth0:
Unexpected value 'AuthModule' imported by the module 'DynamicTestModule'. Please add an @NgModule annotation.
Parte extraña: nuestra prueba unitaria actual con Karma funciona a la perfección sin errores
Especificación de ejemplo:
beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ AuthModule.forRoot(mockAuth0Config), HttpClientTestingModule ], declarations: [ MyComponent ] }).compileComponents(); })); La biblioteca de Auth0 me parece buena (no es un componente o servicio, de hecho es un "Módulo" que usa la interfaz ModuleWithProviders :
Todos los demás problemas con los que me he encontrado son cuando los componentes o servicios se importan incorrectamente, lo que no es el caso aquí.
Además, AuthModule.forRoot({...}) se usa en las imports de nuestro app.module.ts muy bien y es la base para usar Auth0 con Angular, que funciona sin problemas en producción.
El error anterior solo ocurre cuando se ejecutan nuestras pruebas existentes en Jest.
La solución a la que llegué fue omitir Auth0 por completo y crear un módulo Auth0 simulado que imita las mismas funciones y parámetros.
@NgModule({ imports: [], exports: [] }) export class AuthModuleMock { /** * Mock forRoot method * @param config The optional configuration for the SDK. */ static forRoot(config ?: AuthConfig) : ModuleWithProviders<AuthModule> { return { ngModule: AuthModule, providers: [ AuthService, AuthGuard, { provide: AuthConfigService, useValue: config }, { provide : Auth0ClientService, useFactory: () : any => { return; }, deps : [ AuthClientConfig ] } ] }; } } Estos son ellos importados en los archivos .spec en lugar del AuthModule proporcionado por Auth0
beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ AuthModuleMock.forRoot(mockAuth0Config), HttpClientTestingModule ], declarations: [ MyComponent ] }).compileComponents(); }));Use preset: jest-preset-angular en jest.config o vuelva a generar esas bibliotecas/módulos compartidos con la nueva configuración y mueva los códigos fuente antiguos a la nueva biblioteca generada.