Translations: Español, Français, Italiano, 日本語, Português, Русский, 简体中文
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, preferrably 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:
const http = require('http');
const test = require('ava');
const got = require('got');
const listen = require('test-listen');
const app = require('../app');
test.before(async t => {
t.context.server = http.createServer(app);
t.context.baseUrl = await listen(t.context.server);
});
test.after.always(t => {
t.context.server.close();
});
test.serial('get /user', async t => {
const res = await got('/user', { baseUrl: t.context.baseUrl, json: true });
t.is(res.body.email, '[email protected]');
});
Other libraries you may find useful: