Skip to content

Latest commit

 

History

History
38 lines (27 loc) · 2.22 KB

endpoint-testing.md

File metadata and controls

38 lines (27 loc) · 2.22 KB

Endpoint testing

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

Open in StackBlitz

AVA doesn't have a built-in method for testing endpoints, but you can use any HTTP client of your choosing, for example got. You'll also need to start an HTTP server, preferably on a unique port so that you can run tests in parallel. For that we recommend test-listen.

Since tests run concurrently, it's best to create a fresh server instance at least for each test file, but perhaps even for each test. This can be accomplished with test.before() and test.beforeEach() hooks and t.context. If you start your server using a test.before() hook you should make sure to execute your tests serially.

Check out the example below:

import http from 'node:http';
import test from 'ava';
import got from 'got';
import listen from 'test-listen';
import app from '../app';

test.before(async t => {
	t.context.server = http.createServer(app);
	t.context.prefixUrl = await listen(t.context.server);
});

test.after.always(t => {
	t.context.server.close();
});

test.serial('get /user', async t => {
	const {email} = await got('user', {prefixUrl: t.context.prefixUrl}).json();
	t.is(email, 'ava@rocks.com');
});

Other libraries you may find useful: