Я новичок в тестировании Apollo GraphQL, и я создал свой первый тест, вы можете увидеть его ниже.
найти-trip.spec.ts
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { FindTripSummaryComponent } from './find-trip-summary.component';
import { ApolloTestingModule, ApolloTestingController } from 'apollo-angular/testing';
export interface Booking {
firstName: string;
lastName: string;
}
describe('FindTripSummaryComponent', () => {
let component: FindTripSummaryComponent;
let fixture: ComponentFixture<FindTripSummaryComponent>;
let controller: ApolloTestingController;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ FindTripSummaryComponent ],
imports: [RouterTestingModule, ApolloTestingModule]
});
// tslint:disable-next-line: deprecation
controller = TestBed.get(ApolloTestingController);
}));
beforeEach(() => {
fixture = TestBed.createComponent(FindTripSummaryComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should fetch the proper graphQL data', () => {
component.query.subscribe( (result) => {
expect(result.data.booking.firstName).toEqual('John');
expect(result.data.booking.lastName).toEqual('Black');
});
const op = controller.expectOne(component.query);
// Respond with mock data, causing Observable to resolve.
op.flush({
data : {
booking: {
bookingCode: 'ABC123',
firstName: 'John',
lastName: 'Black'
},
}
});
});
afterEach( () => {
controller.verify();
});
});
Все в порядке, кроме сообщения, которое я получаю при запуске тестов:
Expected no open operations, found 1: GetBookingById
Я довольно дезориентирован, потому что я очищаю ответ, никакие операции не должны быть в состоянии ожидания. Единственное, что я не делаю, это отписываюсь от наблюдаемого, это связано с этим?
Это запрос, который я выполняю:
query GetBookingById($bookingCode: ID!) {
booking(bookingCode: $bookingCode) {
bookingCode
firstName
lastName
}
}