0

Someone that can help me to fix the following error:

(method) CallGraphQL.executeQuery(queryToExecute: DocumentNode): Promise<ApolloQueryResult<any>> Type 'Promise<ApolloQueryResult<any>>' is missing the following properties from type 'ApolloQueryResult<any>': data, loading, networkStatus, stale

Pretty much that I am doing is trying to create a question using the screen play pattern with the serenity-js framework, coding with typescript, so when I am trying to create the question, I try to use on the abilities I create in the class file but I am getting a issue with the Promise from the ability class:

From this file is where I am getting the error:

import { Actor, Question, Log } from '@serenity-js/core';
import { CallGraphQL } from '../abilities/callGraphQL';
import { DocumentNode } from 'graphql';
import { ApolloClient, ApolloQueryResult } from 'apollo-client';

export const expectedResult = (query: DocumentNode): Question<ApolloQueryResult<any>> =>
  Question.about(`the result of the query`, (actor: Actor): ApolloQueryResult<any> => {
    const ability = CallGraphQL.as(actor);
    Log.the(ability.executeQuery(query));
    return Promise.resolve(ability.executeQuery(query)); // HERE IS THE ERROR
});

From this file I am calling the async method:

import { NormalizedCacheObject } from 'apollo-cache-inmemory';
import { ApolloClient, ApolloQueryResult } from 'apollo-client';
import { Container } from 'inversify';
import 'reflect-metadata';
import { Ability, Actor, UsesAbilities } from '@serenity-js/core';
import GraphQLConnection from '../../src/GraphQLConnection';
import { DocumentNode } from 'graphql';

export class CallGraphQL implements Ability {
  public result: ApolloQueryResult<any>;
  public _apolloClient: ApolloClient<NormalizedCacheObject>;
  private projectContainer: Container = new Container();

  constructor(private readonly myAbility: GraphQLConnection) {
  }

  public static with(myAbility: GraphQLConnection): CallGraphQL {
    return new CallGraphQL(myAbility);
  }

  public static as(actor: UsesAbilities): CallGraphQL {
    return actor.abilityTo(CallGraphQL);
  }

  public connect(): ApolloClient<NormalizedCacheObject> {
    const myApollo = new GraphQLConnection();
    this._apolloClient = myApollo.getConnection(this._apolloClient);
    return this._apolloClient;
  }

  public async executeQuery(queryToExecute: DocumentNode): Promise<ApolloQueryResult<any>> {
    try {
      this.result = await this._apolloClient.query({
        query: queryToExecute,
      });
    } catch (error) {
      console.log(error);
    }
    return this.result;
  }
}

Appreciate your help, Thanks

0 Answers0