Permalink
32 lines (23 sloc) 1.67 KB

Endpoint testing

Translations: Español, Français, Italiano, 日本語, Português, Русский, 简体中文

AVA doesn't have a builtin method for testing endpoints, but you can use any assertion library with it. Let's use supertest.

Since tests run concurrently, it's best to create a fresh server instance for each test, because if we referenced the same instance, it could be mutated between tests. This can be accomplished with a test.beforeEach and t.context, or with simply a factory function:

function makeApp() {
	const app = express();
	app.use(bodyParser.json());
	app.post('/signup', signupHandler);
	return app;
}

Next, just inject your server instance into supertest. The only gotcha is to use a promise or async/await syntax instead of the supertest end method:

test('signup:Success', async t => {
	t.plan(2);

	const res = await request(makeApp())
		.post('/signup')
		.send({email: 'ava@rocks.com', password: '123123'});

	t.is(res.status, 200);
	t.is(res.body.email, 'ava@rocks.com');
});