import gql from 'graphql-tag'; import { execute, ApolloLink } from '../link'; const sampleQuery = gql` query SampleQuery { stub { id } } `; export function checkCalls<T>(calls: any[] = [], results: Array<T>) { expect(calls.length).toBe(results.length); calls.map((call, i) => expect(call.data).toEqual(results[i])); } export interface TestResultType { link: ApolloLink; results?: any[]; query?: string; done?: () => void; context?: any; variables?: any; } export function testLinkResults(params: TestResultType) { const { link, context, variables } = params; const results = params.results || []; const query = params.query || sampleQuery; const done = params.done || (() => void 0); const spy = jest.fn(); execute(link, { query, context, variables }).subscribe({ next: spy, error: error => { expect(error).toEqual(results.pop()); checkCalls(spy.mock.calls[0], results); if (done) { done(); } }, complete: () => { checkCalls(spy.mock.calls[0], results); if (done) { done(); } }, }); }