REST

Common tests for REST APIs

Features of this Example

  • Basic authentication

  • Storing and Reading Environment Variables in Asserted

  • Test the list, create, get, update, and remove REST endpoints

Walkthrough

This example was referenced in a walkthrough about Node API Health Checks and Uptime

Try it out

Repo is available here.

# Clone example
git clone https://github.com/assertedio/node-uptime
# Enter directory and install
cd graphql-uptime/
npm install
# Run asserted tests
npm run test:asrtd

Tests

Can also be viewed on github here.

const { expect } = require('chai');
const got = require('got');
const getenv = require('getenv');
const path = require('path');
require('dotenv').config({ path: path.join(__dirname, './.env') });
const TOKEN = getenv('TOKEN');
const client = got.extend({
prefixUrl: 'http://localhost:3000',
headers: { authorization: TOKEN },
});
describe('node api tests', () => {
let userId;
it('get all users', async () => {
const { data } = await client.get('users').json();
expect(data.length).to.eql(4);
});
it('create user', async () => {
const { data } = await client.post('users', { json: { name: 'Foo Bario', email: 'foo@bar.io' }}).json();
const { id, name, email } = data;
userId = id;
expect(userId).to.exist;
expect(name).to.eql('Foo Bario');
expect(email).to.eql('foo@bar.io');
});
it('get user', async () => {
expect(userId).to.exist;
const { data } = await client.get('users/' + userId).json();
const { id, name, email } = data;
expect(id).to.eql(userId);
expect(name).to.eql('Foo Bario');
expect(email).to.eql('foo@bar.io');
});
it('update user', async () => {
expect(userId).to.exist;
const { data } = await client.put('users/' + userId, { json: { name: 'Bar Yaz', email: 'bar@yaz.io' }}).json();
const { id, name, email } = data;
expect(id).to.eql(userId);
expect(name).to.eql('Bar Yaz');
expect(email).to.eql('bar@yaz.io');
});
it('remove user', async () => {
expect(userId).to.exist;
await client.delete('users/' + userId).json();
const { data } = await client.get('users/' + userId).json();
expect(data).to.eql(null);
});
});