Skip to Content
SWR 2.0 is out! Read more →

Testing

GraphQL Yoga makes it easy to test your GraphQL API. It has built-in support for HTTP injection. You can use any testing framework of your choice.

Using inject

import { createServer } from '@graphql-yoga/common'
 
const yoga = createServer()
 
const { response, executionResult } = await yoga.inject({
  document: '{ greetings }'
})
 
console.assert(response.status === 200, 'Response status should be 200')
console.assert(
  executionResult.data.greetings ===
    'This is the `greetings` field of the root `Query` type',
  `Expected 'This is the \`greetings\` field of the root \`Query\` type' but got ${executionResult.data.greetings}`
)

Using fetch to Test Just Like Browsers on Any JS Environment

import { createServer } from '@graphql-yoga/common'
 
const yoga = createServer()
 
const response = await yoga.fetch('http://localhost:4000/graphql', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    query: '{ greetings }'
  })
})
 
console.assert(response.status === 200, 'Response status should be 200')
const executionResult = await response.json()
console.assert(
  executionResult.data.greetings ===
    'This is the `greetings` field of the root `Query` type',
  `Expected 'This is the \`greetings\` field of the root \`Query\` type' but got ${executionResult.data.greetings}`
)

Using supertest For Node.js

import { createServer } from '@graphql-yoga/node'
import request from 'supertest'
import { deepEqual } from 'node:assert'
 
const yoga = createServer()
 
const response = await request(yoga).post('/graphql').send({
  query: '{ greetings }'
})
 
deepEqual(response.status, 200)
deepEqual(
  response.body.data.greetings,
  'This is the `greetings` field of the root `Query` type'
)