Jest testing utilities for GraphQL Code Generator with custom matchers, TypeScript validation, and GraphQL server mocking
npx @tessl/cli install tessl/npm-graphql-codegen--testing@3.0.0GraphQL Codegen Testing provides comprehensive testing utilities specifically designed for the GraphQL Code Generator ecosystem. It extends Jest with custom matchers for comparing generated code output, includes utilities for mocking GraphQL servers, TypeScript compilation testing, and monorepo workspace management.
npm install @graphql-codegen/testingjest-diff, typescript >= 3.0.0import {
validateTs,
compileTs,
mockGraphQLServer,
useMonorepo,
resolversTestingSchema,
resolversTestingValidate
} from "@graphql-codegen/testing";For CommonJS:
const {
validateTs,
compileTs,
mockGraphQLServer,
useMonorepo,
resolversTestingSchema,
resolversTestingValidate
} = require("@graphql-codegen/testing");Important: Importing this package automatically extends Jest with custom matchers. The toBeSimilarStringTo matcher becomes globally available in all test files.
import { validateTs, resolversTestingValidate } from "@graphql-codegen/testing";
// Validate TypeScript code generated by plugins
const generatedCode = `
export interface User {
id: string;
name: string;
}
`;
validateTs(generatedCode);
// Test resolver plugins with pre-built schema
const result = await plugin(resolversTestingSchema, [], config);
await resolversTestingValidate(result);
// Use Jest matcher for string comparisons
expect(actualCode).toBeSimilarStringTo(expectedCode);GraphQL Codegen Testing is built around several key components:
Custom Jest matchers for comparing generated code output with whitespace normalization and detailed diff reporting.
declare global {
namespace jest {
interface Matchers<R> {
toBeSimilarStringTo(expected: string): R;
}
}
}Utilities for validating and compiling TypeScript code generated by GraphQL Codegen plugins, with comprehensive error reporting and customizable compiler options.
function validateTs(
pluginOutput: Types.PluginOutput,
options?: CompilerOptions,
isTsx?: boolean,
isStrict?: boolean,
suspenseErrors?: string[],
compileProgram?: boolean
): void;
function compileTs(
contents: string,
options?: CompilerOptions,
isTsx?: boolean,
openPlayground?: boolean
): void;Mock GraphQL server creation for integration testing, built on nock and graphql-helix for realistic GraphQL request/response handling.
function mockGraphQLServer(config: {
schema: GraphQLSchema;
host: string;
path: string | RegExp | ((path: string) => boolean);
intercept?: (obj: nock.ReplyFnContext) => void;
method?: string;
}): nock.Scope | null;Pre-built GraphQL schema and validation utilities specifically designed for testing resolver plugins with comprehensive type coverage.
const resolversTestingSchema: GraphQLSchema;
function resolversTestingValidate(
content: Types.PluginOutput,
config?: any,
pluginSchema?: GraphQLSchema,
additionalCode?: string
): Promise<string>;Utilities for managing test environments in monorepo setups, including process.cwd() mocking and project directory discovery.
function useMonorepo(options: { dirname: string }): {
correctCWD(): void;
};import { Types } from '@graphql-codegen/plugin-helpers';
import { CompilerOptions } from 'typescript';
import { GraphQLSchema } from 'graphql';
import * as nock from 'nock';
// Re-exported types from dependencies
export { Types, CompilerOptions, GraphQLSchema };
// Plugin output types
interface ComplexPluginOutput {
prepend?: string[];
content: string;
append?: string[];
}
type PluginOutput = string | ComplexPluginOutput;
// Mock server configuration
interface MockGraphQLServerConfig {
schema: GraphQLSchema;
host: string;
path: string | RegExp | ((path: string) => boolean);
intercept?: (obj: nock.ReplyFnContext) => void;
method?: string;
}
// Monorepo utilities configuration
interface MonorepoOptions {
dirname: string;
}
interface MonorepoHelpers {
correctCWD(): void;
}
// Error types
interface ValidationError extends Error {
name: 'ValidationError';
}
interface CompilationError extends Error {
name: 'CompilationError';
diagnostics?: string[];
}