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);
});
});
});
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: {}}.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With