Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

graphql-tester (unit tests) with Graphql Apollo Server

How to write unit tests for graphql. I am using apollo server, graphql-tester, and graphql.

When i run the test it gives following error


    { raw: '{"errors":[{"message":"Cannot read property \'definitions\' of undefined"}]}',
      data: undefined,
      errors: [ { message: 'Cannot read property \'definitions\' of undefined' } ],
      headers: 
       { 'x-powered-by': 'Express',
         'content-type': 'application/json',
         date: 'Wed, 18 Jan 2017 05:56:22 GMT',
         connection: 'close',
         'transfer-encoding': 'chunked' },
      status: 400,
      success: false }
          1) Returns success


      0 passing (35ms)
      1 failing

      1) Unittest1 Returns success:
         TypeError: Cannot read property 'success' of undefined
          at Assertion. (node_modules/chai/lib/chai/core/assertions.js:890:14)
          at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/addMethod.js:41:25)
          at Assertion.somethingMethod (node_modules/chai-things/lib/chai-things.js:97:25)
          at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/overwriteMethod.js:49:33)
          at Assertion.allMethod (node_modules/chai-things/lib/chai-things.js:165:25)
          at Assertion.ctx.(anonymous function) (node_modules/chai/lib/chai/utils/overwriteMethod.js:49:33)
          at node_modules/chai-as-promised/lib/chai-as-promised.js:305:22
          at process._tickCallback (internal/process/next_tick.js:103:7)

Following is the unit test.


    const tester = require('graphql-tester').tester;
    const fromGlobalId = require('graphql-relay').fromGlobalId;

    const chai = require('chai');

    chai.should();
    chai.use(require('chai-things'));
    chai.use(require('chai-properties'));
    chai.use(require('chai-arrays'));
    chai.use(require('chai-as-promised'));

    describe('Sites', () => {
      let sitesTest = tester({
        url: 'http://localhost:3000/graphql'
      });

      describe('Unittest1', () => {
        const response = sitesTest('{viewer {id}}').then((data) => {
          console.log(data)
        });

        it('Returns success', () => {
          return response.should.eventually.have.property('success').equal(true);
        });

      });

    });

like image 616
M Atif Avatar asked Jun 03 '26 21:06

M Atif


1 Answers

Here's how I got it working:

const gql = tester({
  server: createExpressWrapper(server),
  url: '/graphql',
  authorization: `Bearer ${token}`,
  contentType: 'application/json'
})

gql(JSON.stringify({ query: '{ users { id } }' })).then((data) => {

})

Apollo's graphql server expects the content type to be set to application/json with a payload of { query: "...", variables: {}}.

like image 105
jschr Avatar answered Jun 08 '26 00:06

jschr