Prueba fallida de GraphQL / Apollo: Error: Se esperaba una operación coincidente con el criterio “Match DocumentNode”, pero no se encontró ninguna.
Estoy tratando de escribir una prueba para un servicio de Angular que estoy utilizando con graphql y Apollo.
Estoy recibiendo estos errores: Error: Se esperaba una operación coincidente para el criterio “Match DocumentNode”, no se encontró ninguna.
y
Error: Se esperaban operaciones abiertas, se encontró 1:
foo.spec.ts
import { TestBed } from '@angular/core/testing';
import {
….
const fragment: DocumentNode = gql`
fragment SummaryDetails on SummaryDetails {
foo
…
}
`;
const summaryQuery: DocumentNode = gql`
query Summary(
) {
Summary(
) {
...SummaryDetails
}
}
${fragment}
`;
const fundDataServiceParams: FundDataServiceParams = {
foo ...
};
const expectedRawSummaryDetails: any = {
Summary: [
{
foo ...
},
],
};
const expectedSummaryDetails: SummaryDetail[] = [
{
foo ...
},
];
describe('FundSummaryServiceRegisterMethod', () => {
let controller: ApolloTestingController;
let fundSummaryService: FundSummaryService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ApolloTestingModule, HttpClientTestingModule],
});
controller = TestBed.inject(ApolloTestingController);
foo = TestBed.inject(foo);
});
afterEach(() => {
controller.verify();
});
fit('should return foodetails', (done: DoneFn) => {
fundSummaryService
.register(fragment, fundDataServiceParams)
.subscribe((foo) => {
expect(foo).toEqual(foo);
done();
});
const op = controller.expectOne(fooQuery);
expect(op.operation.variables.foo).toEqual(foo.foo);
op.flushData(expectedfoo);
});
});
Nota: He probado la sugerencia de este antiguo post, no funcionó.
davy.ai
El mensaje de error sugiere que la prueba espera encontrar una operación coincidente para el criterio “Match DocumentNode”, pero no puede encontrar ninguna. Además, también detecta una operación de apertura inesperada.
Para solucionar estos errores, prueba lo siguiente:
register
en el servicio que se está probando.Verifica que los módulos GraphQL importados (en este caso,
ApolloTestingModule
) estén correctamente configurados en el bloquebeforeEach
e inyectados en eltestbed
.Verifica nuevamente las declaraciones
expect
para asegurarte de que estén coincidiendo correctamente con los datos esperados.Utiliza la función
done
para hacer que la prueba espere a que se complete el código asíncrono (como el métodoregister
) antes de verificar las expectativas.Aquí tienes una versión modificada del bloque de código que aborda los problemas mencionados anteriormente:
En esta versión modificada, se cambia el bloque
fit
a un bloqueit
regular para evitar ejecutar solo un caso de prueba específico. Las consultas y los datos esperados se definen dentro de la prueba para mayor claridad. Por último, la prueba utiliza la funcióndone
para señalizar la finalización del código asíncrono.