diff --git a/src/core/__tests__/QueryManager/index.ts b/src/core/__tests__/QueryManager/index.ts index 59aa36e0f1b..f2b32b8bd51 100644 --- a/src/core/__tests__/QueryManager/index.ts +++ b/src/core/__tests__/QueryManager/index.ts @@ -16,7 +16,7 @@ import { // mocks import mockQueryManager from '../../../utilities/testing/mocking/mockQueryManager'; import mockWatchQuery from '../../../utilities/testing/mocking/mockWatchQuery'; -import { MockApolloLink, mockSingleLink, MockLink } from '../../../utilities/testing/mocking/mockLink'; +import { MockApolloLink, mockSingleLink } from '../../../utilities/testing/mocking/mockLink'; // core import { ApolloQueryResult } from '../../types'; @@ -495,10 +495,20 @@ describe('QueryManager', () => { const onRequestSubscribe = jest.fn(); const onRequestUnsubscribe = jest.fn(); - const mockedSingleLink = new MockLink([mockedResponse], { - addTypename: true, - onSubscribe: onRequestSubscribe, - onUnsubscribe: onRequestUnsubscribe + const mockedSingleLink = new ApolloLink(() => { + return new Observable(observer => { + onRequestSubscribe(); + + const timer = setTimeout(() => { + observer.next(mockedResponse.result); + observer.complete(); + }, 0); + + return () => { + onRequestUnsubscribe(); + clearTimeout(timer); + }; + }); }); const mockedQueryManger = new QueryManager({ @@ -512,10 +522,14 @@ describe('QueryManager', () => { notifyOnNetworkStatusChange: false }); + const observerCallback = wrap(reject, () => { + reject(new Error('Link subscription should have been cancelled')); + }); + const subscription = observableQuery.subscribe({ - next: wrap(reject, () => { - reject(new Error('Link subscriptions should have been cancelled')); - }), + next: observerCallback, + error: observerCallback, + complete: observerCallback }); subscription.unsubscribe(); diff --git a/src/react/components/__tests__/client/Mutation.test.tsx b/src/react/components/__tests__/client/Mutation.test.tsx index d70f8e16617..e3c3861d3d8 100644 --- a/src/react/components/__tests__/client/Mutation.test.tsx +++ b/src/react/components/__tests__/client/Mutation.test.tsx @@ -108,7 +108,7 @@ describe('General Mutation testing', () => { function mockClient(m: any) { return new ApolloClient({ - link: new MockLink(m, { addTypename: false }), + link: new MockLink(m, false), cache: new Cache({ addTypename: false }) }); } diff --git a/src/utilities/testing/mocking/MockedProvider.tsx b/src/utilities/testing/mocking/MockedProvider.tsx index 63e3ece1998..5612a0f53c5 100644 --- a/src/utilities/testing/mocking/MockedProvider.tsx +++ b/src/utilities/testing/mocking/MockedProvider.tsx @@ -47,7 +47,7 @@ export class MockedProvider extends React.Component< defaultOptions, link: link || new MockLink( mocks || [], - { addTypename }, + addTypename, ), resolvers, }); diff --git a/src/utilities/testing/mocking/mockLink.ts b/src/utilities/testing/mocking/mockLink.ts index 741b64e69bd..a754c3640bc 100644 --- a/src/utilities/testing/mocking/mockLink.ts +++ b/src/utilities/testing/mocking/mockLink.ts @@ -35,25 +35,17 @@ function requestToKey(request: GraphQLRequest, addTypename: Boolean): string { return JSON.stringify(requestKey); } -interface MockLinkOptions { - addTypename?: boolean; - onSubscribe?: () => void; - onUnsubscribe?: () => void; -} - export class MockLink extends ApolloLink { public operation: Operation; public addTypename: Boolean = true; private mockedResponsesByKey: { [key: string]: MockedResponse[] } = {}; - private options: MockLinkOptions; constructor( mockedResponses: ReadonlyArray, - options: MockLinkOptions = {} + addTypename: Boolean = true ) { super(); - this.options = options; - this.addTypename = options.addTypename ?? true; + this.addTypename = addTypename; if (mockedResponses) { mockedResponses.forEach(mockedResponse => { this.addMockedResponse(mockedResponse); @@ -117,9 +109,7 @@ export class MockLink extends ApolloLink { } } - const requestObservable = new Observable(observer => { - this.options.onSubscribe?.(); - + return new Observable(observer => { const timer = setTimeout(() => { if (configError) { try { @@ -151,12 +141,9 @@ export class MockLink extends ApolloLink { }, response && response.delay || 0); return () => { - this.options.onUnsubscribe?.(); clearTimeout(timer); }; }); - - return requestObservable; } private normalizeMockedResponse( @@ -196,5 +183,5 @@ export function mockSingleLink( maybeTypename = true; } - return new MockLink(mocks, { addTypename: maybeTypename }); + return new MockLink(mocks, maybeTypename); }