Show.test.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import * as React from 'react';
  2. import {shallow, ShallowWrapper} from 'enzyme';
  3. import {createMockEnvironment, MockPayloadGenerator} from 'relay-test-utils';
  4. import {QueryRenderer, graphql} from 'react-relay';
  5. import * as ReactTestRenderer from 'react-test-renderer';
  6. import FragmentedPokemonShow, {
  7. PokemonShow,
  8. Props,
  9. } from 'packs/frontend/components/pages/pokemon/Show';
  10. import {Show_pokemon as ShowPokemonDataType} from 'packs/frontend/components/pages/pokemon/__generated__/Show_pokemon.graphql';
  11. const pokemon: ShowPokemonDataType = {
  12. id: '1',
  13. iid: 'x1',
  14. nickname: 'Bulbasaur',
  15. pokedexNumber: 1,
  16. ' $refType': '' as any,
  17. };
  18. const defaultProps = {
  19. pokemon: pokemon,
  20. };
  21. function setup(props = defaultProps): ShallowWrapper {
  22. return shallow(<PokemonShow {...props} />);
  23. }
  24. describe('<PokemonShow />', () => {
  25. it('displays a pokemon', () => {
  26. const wrapper = setup();
  27. expect(wrapper).toMatchSnapshot();
  28. });
  29. it('requests data from a GraphQL fragment', () => {
  30. const environment = createMockEnvironment();
  31. const mockId = 'mock-id-1';
  32. const TestRenderer = (): JSX.Element => (
  33. <QueryRenderer
  34. environment={environment}
  35. query={graphql`
  36. query Show_pokemonSuccessQuery($mockId: ID!) @relay_test_operation {
  37. pokemon: node(id: $mockId) {
  38. ...Show_pokemon
  39. }
  40. }
  41. `}
  42. render={args => {
  43. const {error, props} = args as {error: Error; props: Props};
  44. if (props) {
  45. // Prevent TS Compiler from complaining about unsupplied props
  46. const Component = FragmentedPokemonShow as any;
  47. // eslint-disable-next-line react/prop-types
  48. return <Component pokemon={props.pokemon} />;
  49. } else if (error) {
  50. return error.message;
  51. }
  52. return 'Loading...';
  53. }}
  54. variables={{mockId}}
  55. />
  56. );
  57. environment.mock.queueOperationResolver(operation =>
  58. MockPayloadGenerator.generate(operation, {
  59. Pokemon: () => ({
  60. id: mockId,
  61. iid: '1',
  62. nickname: 'Bulba',
  63. pokedexNumber: 3,
  64. }),
  65. })
  66. );
  67. const renderer = ReactTestRenderer.create(<TestRenderer />);
  68. expect(renderer).toMatchSnapshot();
  69. });
  70. });