1.2.1 • Published 5 years ago

mocked-apollo-link v1.2.1

Weekly downloads
3
License
ISC
Repository
github
Last release
5 years ago

mocked-apollo-link

Using graphql-tools addMockFunctionsToSchema quickly generate schema mocks for rapid development or testing. Useful if you have a large schema or quries and only care about mocking parts.

Inspriation

This takes the mocking concept one step further by combining the two techniques and using addMockFunctionsToSchema to get mocking working quickly.

Testing Example

Given the schema:

type Author {
  name: String!
  id: Int!
  bio: String!
}

type Query {
  authors: [Author]
}
// AuthorList.js
import React from 'react';
import { Query } from 'react-apollo';
import gql from 'graphql-tag';

const GET_ALL_AUTHORS = gql`
  query GET_ALL_AUTHORS {
    authors {
      name
      id
    }
  }
`;

export default class AuthorsList extends React.Component {
  render() {
    return (
      <Query query={GET_ALL_AUTHORS}>
        {({ data, loading, error }) => {
          if (loading) {
            return 'loading...';
          }
          if (error) {
            return `Error ${error}`;
          }

          return data.authors.map(author => <a key={author.id}>{author.name}</a>);
        }}
      </Query>
    );
  }
}
// __tests__/Component.js
import React from 'react';
import { render, waitForElement } from 'react-testing-library';
import { makeMockLink, MockedProvider } from 'mocked-apollo-link';

// run an introspection query and save the results someplace
import introspectionResult from 'test-support/introspectedResult.json';

import AuthorList from '../AuthorList';

const defaultMocks = {
  author() {
    return {
      id: 1,
      name: 'Charles Dickens',
    };
  },
};

function renderWithContext(ui, mocks = defaultMocks) {
  const MockLink = makeMockLink({ introspectedSchema: introspectionResult, mocks });
  return render(<MockedProvider link={new MockLink()}>{ui}</MockedProvider>);
}

test('Renders out a list of authors', async () => {
  const { getByText } = renderWithContext(<AuthorList />);

  // wait for element to be on the page
  // this will skip the loading state
  await waitForElement(() => getByText(/charles dickens/));
});
1.2.1

5 years ago

1.2.0

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.0

5 years ago