You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Luke Childs 0052d45c4f Update description 8 years ago
src Don't expose all certs, just the CA cert 8 years ago
test Don't expose all certs, just the CA cert 8 years ago
.gitignore Initial commit 8 years ago
.travis.yml Initial commit 8 years ago
LICENSE Initial commit 8 years ago
README.md Update description 8 years ago
package-lock.json 0.2.1 8 years ago
package.json 0.2.1 8 years ago

README.md

create-test-server

Creates a minimal express server for testing

Build Status Coverage Status npm

Inspired by the createServer() helper function in the Got tests.

A simple interface for creating a preconfigured express instance listening for both HTTP and HTTPS traffic.

Ports are chosen at random for HTTP/HTTPS. A self signed certificate is automatically generated, along with an associated CA certificate for you to validate against.

Install

npm install --save-dev create-test-server

Usage

createTestServer() has a Promise based API that pairs well with a modern asynchronous test runner such as AVA.

You can create a separate server per test:

import test from 'ava';
import got from 'got';
import createTestServer from 'create-test-server';

test(async t => {
  const server = await createTestServer();

  console.log(server.url);
  // http://localhost:5486
  console.log(server.sslUrl);
  // https://localhost:5487

  // This is just an express route
  // You could use any express middleware too
  server.get('/foo', (req, res) => res.send('bar'));

  const response = await got(server.url + '/foo');
  t.is(response.body, 'bar');
});

Or share a server across multiple tests:

let server;

test.before(async () => {
  server = await createTestServer();
  server.get('/foo', (req, res) => res.send('bar'));
});

test(async t => {
  const response = await got(server.url + '/foo');
  t.is(response.body, 'bar');
});

test(async t => {
  const response = await got(server.url + '/foo');
  t.is(response.statusCode, 200);
});

You can also make properly authenticated SSL requests by settings a common name for the server certificate and validating against the provided CA certificate:

test(async t => {
  const server = await createTestServer({ certificate: 'foobar.com' });
  server.get('/foo', (req, res) => res.send('bar'));

  const response = await got(server.sslUrl + '/foo', {
    strictSSL: true,
    ca: server.caCert,
    headers: { host: 'foobar.com' }
  });
  t.is(response.body, 'bar');
});

You can still make an SSL connection without messing about with certificates if your client supports unauthorised SSL requests:

test(async t => {
  const server = await createTestServer();
  server.get('/foo', (req, res) => res.send('bar'));

  const response = await got(server.sslUrl + '/foo', {
    rejectUnauthorized: false
  });
  t.is(response.body, 'bar');
});

You can also easily stop/restart the server:

const server = await createTestServer();
// server.url and server.sslUrl are listening

await server.close();
// server.url and server.sslUrl are closed

await server.listen();
// server.url and server.sslUrl are listening

License

MIT © Luke Childs