Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add test for SSR cacheHit render count
  • Loading branch information
bmullan91 committed Feb 26, 2019
commit d8d18170619467e15397cf93189d38683e9d6be3
37 changes: 37 additions & 0 deletions test/integration/useQuery.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ import React from 'react';
import { render, waitForElement } from 'react-testing-library';
import { GraphQLClient, ClientContext, useQuery } from '../../src';

let testComponentRenderCount = 0;

const getWrapper = client => props => (
<ClientContext.Provider value={client}>
{props.children}
</ClientContext.Provider>
);

const TestComponent = ({ query = '{ hello }', options }) => {
testComponentRenderCount++;
const { loading, error, data } = useQuery(query, options);

return (
Expand All @@ -25,6 +28,7 @@ describe('useQuery Integrations', () => {
let client, wrapper;

beforeEach(() => {
testComponentRenderCount = 0;
client = new GraphQLClient({ url: '/graphql' });
client.request = jest.fn().mockResolvedValue({ data: 'data v1' });
wrapper = getWrapper(client);
Expand Down Expand Up @@ -56,6 +60,13 @@ describe('useQuery Integrations', () => {
dataNode = await waitForElement(() => getByTestId('data'));
expect(dataNode.textContent).toBe('data v2');
expect(() => getByTestId('loading')).toThrow();

// 1. loading
// 2. data v1
// 3. explict rerender call
// 4. loading again
// 5. data v2
expect(testComponentRenderCount).toBe(5);
});

it('should reset state when options.variables change', async () => {
Expand Down Expand Up @@ -87,5 +98,31 @@ describe('useQuery Integrations', () => {
dataNode = await waitForElement(() => getByTestId('data'));
expect(dataNode.textContent).toBe('data v2');
expect(() => getByTestId('loading')).toThrow();

// 1. loading
// 2. data v1
// 3. explict rerender call
// 4. loading again
// 5. data v2
expect(testComponentRenderCount).toBe(5);
});

it('should not rerender after a SSR', () => {
client = new GraphQLClient({
url: '/graphql',
cache: {
get: () => ({ error: false, data: 'hello' })
}
});

wrapper = getWrapper(client);

const { getByTestId } = render(<TestComponent />, {
wrapper
});

expect(() => getByTestId('loading')).toThrow();
expect(getByTestId('data').textContent).toBe('hello');
expect(testComponentRenderCount).toBe(1);
});
});