Skip to content

Instantly share code, notes, and snippets.

@lon-io
Created May 25, 2021 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lon-io/1bca5c5dc83faa4b22825f92ed24be23 to your computer and use it in GitHub Desktop.
Save lon-io/1bca5c5dc83faa4b22825f92ed24be23 to your computer and use it in GitHub Desktop.
GraphQL E2E Testing with Supertest
import request from "supertest";
import { GET_RESOURCE } from "./queries/resource";
import startTestServer from "./setup";
import { Await } from "src/types/global";
describe("Queries", () => {
let config: Await<ReturnType<typeof startTestServer>>;
beforeAll(async () => {
config = await startTestServer();
return Promise.resolve();
});
afterAll(async () => {
await stop();
return Promise.resolve();
}, 10000);
test("fetches a single resource", async (done) => {
request(config.httpServer)
.post(config.uri)
.set({ authorization: config.token })
.send(
JSON.stringify({
query: `${config.print(GET_RESOURCE)}`,
variables: { resource_id: 1 },
})
)
.expect("Content-Type", /json/)
.expect(200)
.end((err, res) => {
if (err) return done(err);
expect(res.body).toMatchObject({ message: "Hello, stranger!" });
done();
});
});
});
const gql = require("graphql-tag");
export const GET_RESOURCE = gql`
query property($resource_id: ID!) {
property(resource_id: $resource_id) {
message
}
}
`;
import { expressApp } from "src/server";
import { getTestToken } from "../mocks/user";
const { print } = require('graphql/language/printer');
import { AddressInfo } from "net"
const startTestServer = async () => {
const httpServer = expressApp.listen({ port: 0 });
const token = await getTestToken(1, 'email@email.com');
const uri = `http://localhost:${(httpServer.address() as AddressInfo).port}/graphql/v1`;
return {
token,
uri,
httpServer,
stopServer: () =>
new Promise((resolve) => {
httpServer.close(() => {
console.log("Server closed");
return resolve("Closed");
});
}),
print,
};
};
export default startTestServer;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment