1.0.14 • Published 1 year ago

gql-test-generator v1.0.14

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

gql-test-generator

Npm package for generating fixtures and smoke tests for resolvers.

This is not completed yet. Rough timeline:

  • Invented yesterday.
  • Estimated to enter QA by the new year (currently two days away).
  • After that, it will be in alpha.
  • Beta should be available somewhere around Jan 5th.

Links

Github

https://github.com/James-Mnemosyne/gql-test-generator/tree/master

NPM

https://www.npmjs.com/package/gql-test-generator

Overview

Writing tests kind of sucks. Hopefully, this makes it a bit easier to get a comprehensive test setup.

This enables automated generation of smoke tests for a given resolver.

I plan on actively maintaining this. Feel free to contribute.

Install

You can install this package as a dev dep, or you can install it globally.

NPM

npm i --save-dev gql-test-generator

Yarn

yarn add -D gql-test-generator

Use

Assume that you have the following schema:

enum SomethingEnum {
  Something0
  Something1
  Something2
}

input SomethingInput {
  value0: SomethingEnum
  value1: String
  value2: Int
  value3: Float
  value4Email: String!
}

type SomethingResult {
  str: String!
}

type Query {
  getSomething(input0: SomethingInput!, input1: SomethingInput): SomethingResult
}

add a .gqlTestGenerator.json file, containing the following

{
  "resolverName": "getSomething",
  "schemaFilePath": "./ohLookADirectory/**/*.graphql",
  "resolverFilePath": "./directoryOfResolver/resolverFile.ts",
  "typeFilePath": "./generatedTypesPath/types.generated.ts",
}

Add a script to your package.json:

  "generateTests": "gql-test-generator",

And run (for npm):

npm run generateTests

And you should have a newly output suite of fixture tests, such as:

import { GraphQLResolveInfo } from 'graphql';
import { getSomething } from './directoryOfResolver/resolverFile.ts';
import { SomethingEnum } from './generatedTypesPath/types.generated.ts';

...

describe('getSomething smoke tests', () => {
  beforeAll(() => {
    // Do something here.
  });

  beforeEach(() => {
    // Do something here.
  });


  it('case0', async () => {
    const params = {"input0":{"value0":SomethingEnum.Something0,"value4Email":""},"input1":{"value0":SomethingEnum.Something0,"value4Email":""}};
    const result = await getSomething({}, params, undefined, mockGraphQLResolveInfo)
    expect(result).toMatchSnapshot();
  });



  it('case1', async () => {
    const params = {"input0":{"value0":SomethingEnum.Something0,"value3":0,"value4Email":"random string"},"input1":{"value0":SomethingEnum.Something0,"value3":0,"value4Email":"random string"}};
    const result = await getSomething({}, params, undefined, mockGraphQLResolveInfo)
    expect(result).toMatchSnapshot();
  });



  it('case2', async () => {
    const params = {"input0":{"value0":SomethingEnum.Something0,"value2":null,"value3":-1000.5,"value4Email":""},"input1":{"value0":SomethingEnum.Something0,"value2":null,"value3":-1000.5,"value4Email":""}};
    const result = await getSomething({}, params, undefined, mockGraphQLResolveInfo)
    expect(result).toMatchSnapshot();
  });



  it('case3', async () => {
    const params = {"input0":{"value0":SomethingEnum.Something0,"value2":-1000,"value4Email":"james@bob.edu"},"input1":{"value0":SomethingEnum.Something0,"value2":-1000,"value4Email":"james@bob.edu"}};
    const result = await getSomething({}, params, undefined, mockGraphQLResolveInfo)
    expect(result).toMatchSnapshot();
  });



  it('case4', async () => {
    const params = {"input0":{"value0":SomethingEnum.Something0,"value2":-1000,"value3":2000345.7898,"value4Email":"random string"},"input1":{"value0":SomethingEnum.Something0,"value2":-1000,"value3":2000345.7898,"value4Email":"random string"}};
    const result = await getSomething({}, params, undefined, mockGraphQLResolveInfo)
    expect(result).toMatchSnapshot();
  });

...

});

Extended Use

The following flags are now available for convenience:

--config // Used to specify a configuation file.

Example:

npm run generateTests -- --config configFiles/graphql/generateTests.json
1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago