4.0.0 • Published 8 years ago
chai-graphql v4.0.0
chai-graphql

GraphQL response matcher for Chai assertion library
Works with both parsed JSON responses and local object responses.
Installation
npm install --save-dev chai-graphqlAPI
Methods will "unwrap" the data and/or payload from a response to make testing less repetitive.
assert.graphQl(response, [expectedData])performs a deep equals on theresponse.dataorresponse.data.payloadandexpectedDataif present. Throws if there are any errors inresponse.errors. Returnsresponse.dataassert.graphQLSubset(response, [subsetOfExpectedData])performs a subset match ofresponse.dataorresponse.data.payloadand expectedData if present. Throws if there are any errors inresponse.errors. Returnsresponse.dataassert.graphQLError(response, [errorMatcher])throws if there are not anyresponse.errors, returns theresponse.errors.errorMatchercan be a string, regex or an array of strings or regexes. In the string or regex form the error's message property will bematch()by theerrorMatcher. In the array form, eacherrorMatcheris tested against each error in order. If there a greater or fewer number of matchers than errors an it will throw.
Usage
In your setup
import chai from 'chai'
import chaiGraphQL from 'chai-graphql'
chai.use(chaiGraphQL)in your spec.js
var goodResponse = {
data: {
foo: 'bar'
}
}
// Passes
assert.graphQL(goodResponse, { foo: 'bar' })
assert.graphQLSubset(goodResponse, { foo: 'bar' })
assert.graphQL(goodResponse)
assert.graphQLSubset(goodResponse)
assert.graphQLSubset(goodResponse, { })
assert.notGraphQLError(goodResponse)
expect(goodResponse).to.be.graphQl({ foo: 'bar' })
// Fails
assert.graphQL(goodResponse, { foo: 'FAIL' })
assert.graphQL(goodResponse, { })
assert.graphQLError(goodResponse)
expect(goodResponse).to.be.graphQLError()
const badResponse = {
errors: [
{
message: 'Error message',
stack: 'Prints if present'
},
new GraphQLError('GraphQL Error Object'),
new Error('Regular Error')
]
}
// Passes
assert.graphQLError(badResponse)
expect(badResponse).to.be.graphQLError()
assert.graphQLError(badResponse, 'Error message')
assert.graphQLError(badResponse, /GraphQL Error Object/)
assert.graphQLError(badResponse, [
'Error message',
/GraphQL Error Object/
])
// fails
assert.graphQL(badResponse, { foo: 'bar' })
assert.graphQL(badResponse)
assert.notGraphQLError(badResponse)
expect(badResponse).to.be.graphQl({ foo: 'bar' })
assert.graphQLError(badResponse, 'Rando Error')
assert.graphQLError(badResponse, [ 'Error message' ])