Я пытаюсь протестировать Angular-компонент, используя Jest, который зависит от клиента Apollo graphql.
При тесте я получаю следующую ошибку:
SystemStatusComponent
✕ should create (518ms)
● SystemStatusComponent › should create
Can't resolve all parameters for SystemStatusComponent: (?).
at syntaxError (../packages/compiler/src/util.ts:100:17)
at CompileMetadataResolver._getDependenciesMetadata (../packages/compiler/src/metadata_resolver.ts:957:27)
Это компонент:
export class SystemStatusComponent implements OnInit {
constructor(public apollo: Apollo) {}
error: any;
loading = true;
systemStatuses = [];
ngOnInit() {
this.apollo
.watchQuery({
query: gql`
{
system_status_all {
code
verifyString
}
}
`,
})
.valueChanges.subscribe((result: any) => {
console.log('result: ', result);
this.systemStatuses = result.data && result.data.system_status_all;
this.loading = result.loading;
this.error = result.error;
});
}
}
Это тест:
describe('SystemStatusComponent', () => {
let component: SystemStatusComponent;
let fixture: ComponentFixture<SystemStatusComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
ApolloTestingModule,
],
// providers:[
// {
// provide: Apollo, // <-- Also fails using this
// useValue: jest.fn(),
// }
// ],
declarations: [SystemStatusComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SystemStatusComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
Мне также показалась интересной эта ошибка, содержащая ссылки на ZoneDelegate
:
SystemStatusComponent › should create
expect(received).toBeTruthy()
Received: undefined
28 |
29 | it('should create', () => {
> 30 | expect(component).toBeTruthy();
| ^
31 | });
32 | });
33 |
at it (src/app/pages/admin/system-status/system-status.component.spec.ts:30:23)
at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:391:26)
at ProxyZoneSpec.Object.<anonymous>.ProxyZoneSpec.onInvoke (node_modules/zone.js/dist/proxy.js:129:39)
at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:390:52)
at Zone.Object.<anonymous>.Zone.run (node_modules/zone.js/dist/zone.js:150:43)
at Object.testBody.length (node_modules/jest-preset-angular/zone-patch/index.js:52:27)
Отрывок из package.json:
"@angular/core": "~8.2.3",
"apollo-angular": "^1.7.0"
"jest": "^24.9.0",
Я следовал инструкциям здесь: https://www.apollographql.com/docs/angular/guides/testing/ но они, похоже, не работают.Я подозреваю, что это как-то связано с тем, как Jest специально разрешает зависимости для TestingModule.Я пою пакет jest-preset-angular
.
Мне было интересно, если у кого-то была такая же проблема?Пожалуйста, дайте мне знать, если есть больше информации, которую я могу предоставить.