Generate queries from graphql schema, used for writing api test.
npm install gql-generator-typeGenerate queries from graphql schema, used for writing api test.
``gqlSample schema
type Query {
user(id: Int!): User!
}
type User {
id: Int!
username: String!
email: String!
createdAt: String!
}
`
`gql`Sample query generated
query user($id: Int!) {
user(id: $id) {
id
username
email
createdAt
}
}
`bashInstall
npm install gql-generator -g
node index.js --schemaFilePath ./example/large-schema.graphql --destDirPath ./example/output --includeDeprecatedFields --rootQuery Query --rootMutation Mutation --depthLimit 5
`
Now the queries generated from the sampleTypeDef.graphql can be found in the destDir: ./example/output.
This tool generate 3 folders holding the queries: mutations, queries and subscriptions. And also index.js files to export the queries in each folder.
You can require the queries like this:
`js
// require all the queries
const queries = require('./example/output');
// require mutations only
const mutations = require('./example/output/mutations');
// sample content
console.log(queries.mutations.signup);
console.log(mutations.signup);
/*
mutation signup($username: String!, email: String!, password: String!){
signup(username: $username, email: $email, password: $password){
token
user {
id
username
email
createdAt
}
}
}
*/
`
The tool will automatically exclude any @deprecated schema fields (see more on schema directives here). To change this behavior to include deprecated fields you can use the includeDeprecatedFields flag when running the tool, e.g. gqlg --includeDeprecatedFields.
Say you have a graphql schema like this:
`gql
type Mutation {
signup(email: String!, username: String!, password: String!): UserToken!
}
type UserToken {
token: String!
user: User!
}
type User {
id: Int!
username: String!
email: String!
createdAt: String!
}
`
Before this tool, you write graphql api test like this:
`js
const { GraphQLClient } = require('graphql-request');
require('should');
const host = 'http://localhost:8080/graphql';
test('signup', async () => {
const gql = new GraphQLClient(host);
const query = mutation signup($username: String!, email: String!, password: String!){
signup(username: $username, email: $email, password: $password){
token
user {
id
username
email
createdAt
}
}
};
const data = await gql.request(query, {
username: 'tim',
email: 'timqian92@qq.com',
password: 'samplepass',
});
(typeof data.signup.token).should.equal('string');
);
`
As gqlg generated the queries for you, you don't need to write the query yourself, so your test will becomes:
`js
const { GraphQLClient } = require('graphql-request');
require('should');
const mutations = require('./example/output/mutations');
const host = 'http://localhost:8080/graphql';
test('signup', async () => {
const gql = new GraphQLClient(host);
const data = await gql.request(mutations.signup, {
username: 'tim',
email: 'timqian92@qq.com',
password: 'samplepass',
});
(typeof data.signup.token).should.equal('string');
);
`
- As this tool is used for tests, it expands all of the fields in a query. There might be recursive fields in the query, so gqlg ignores the types which have been added in the parent queries already.region(language: $language1)`.
- Variable names are derived from argument names, so variables generated from multiple occurrences of the same argument name must be deduped. An index is appended to any duplicates e.g.