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 e3c2ba0c3c Clarify what the certificate option is doing 7 years ago
src Don't expose all certs, just the CA cert 7 years ago
test Don't expose all certs, just the CA cert 7 years ago
.gitignore Initial commit 7 years ago
.travis.yml Initial commit 7 years ago
LICENSE Initial commit 7 years ago
README.md Clarify what the certificate option is doing 7 years ago
package-lock.json 0.2.1 7 years ago
package.json 0.2.1 7 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.

A self signed certificate is automatically generated for SSL. An associated CA certificate is also returned 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');
});

License

MIT © Luke Childs