itajaja / relay-mock

A NetworkLayer around mockServer to serve mock data locally
13 stars 1 forks source link

Throwing error with Jest and react-test-renderer #2

Open lucasbento opened 7 years ago

lucasbento commented 7 years ago

I'm experiencing a few problems on trying to use this package with Jest and react-test-renderer, these are my files:

// setup.js
const mySchema = `
type User implements Node {
  id: ID!
  _id: String
  myself: Boolean
  name: String
  nick: String
  email: String
  active: Boolean
}
`;

const networkLayer = new RelayMockNetworkLayer(mySchema);

RelayStore.reset(networkLayer);
// MyComponent.spec.js
import 'react-native';
import React from 'react';
import renderer from 'react-test-renderer';

import MyComponent from '../MyComponent';

describe('<MyComponent />', async () => {
  it('should render without blowing up', async () => {
    const result = renderer.create(<MyComponent />);

    expect(result.toJSON()).toMatchSnapshot();
  });
});

Throws this:

Must provide a schema definition.

      at buildASTSchema (node_modules/relay-mock/node_modules/graphql/utilities/buildASTSchema.js:112:11)
      at buildSchemaFromTypeDefinitions (node_modules/relay-mock/node_modules/graphql-tools/dist/schemaGenerator.js:134:46)
      at mockServer (node_modules/relay-mock/node_modules/graphql-tools/dist/mock.js:36:68)
      at new MockNetworkLayer (node_modules/relay-mock/lib/index.js:29:44)
      at Object.<anonymous> (test/setup.js:1354:18)

I changed the version of graphql-tools to use 0.11.0 which throws:

TypeError: Cannot read property 'Object.<anonymous>' of null
at Runtime._execModule (/Users/user/Documents/Projects/app/node_modules/jest-runtime/build/index.js:444:56)
at Runtime.requireModule (/Users/user/Documents/Projects/app/node_modules/jest-runtime/build/index.js:295:14)
at Runtime.requireModuleOrMock (/Users/user/Documents/Projects/app/node_modules/jest-runtime/build/index.js:365:19)
at RelayQueryRequest.getQueryString (/Users/user/Documents/Projects/app/node_modules/react-relay/lib/RelayQueryRequest.js:93:22)
at MockNetworkLayer.sendQuery (/Users/user/Documents/Projects/app/test/mockServer.js:21:24)
at Array.map (native)
at MockNetworkLayer.sendQueries (/Users/user/Documents/Projects/app/test/mockServer.js:25:356)
at RelayNetworkLayer.sendQueries (/Users/user/Documents/Projects/app/node_modules/react-relay/lib/RelayNetworkLayer.js:93:34)
at RelayNetworkLayer.instrumentedCallback [as sendQueries] (/Users/user/Documents/Projects/app/node_modules/react-relay/lib/RelayProfiler.js:130:40)
at /Users/user/Documents/Projects/app/node_modules/react-relay/lib/RelayNetworkLayer.js:128:16
error Command failed with exit code 1.
itajaja commented 7 years ago

I think this project need an update, it hasn't been updated in 8 months. I'd suggest you first try to make your schema work with mockServer, if that works it means I need to update this project to support the latest graphql tools

lucasbento commented 7 years ago

Thank you for answering back!

It actually seems to work with mockServer but it throws an error on relay-mock, the stacktrace that I sent is not very clear, the errors start here:

  sendQuery = queryRequest => {
    const query = queryRequest.getQueryString(); // <-- here
    const variables = queryRequest.getVariables(); // <-- and here

    return this.server.query(query, variables).then(({ data }) => queryRequest.resolve({ response: data }));
  };
itajaja commented 7 years ago

what version of relay are you using?

lucasbento commented 7 years ago

0.10.0.

sibelius commented 7 years ago

image

sibelius commented 7 years ago

this example repo https://github.com/sibelius/relay-integration-test

has a working version against a real graphql server

I'll try to modify it to test against a mocked server as well