npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@imposter-js/imposter

v1.0.1

Published

Run integrated tests with Imposter.

Downloads

703

Readme

Imposter Mock Engine CI

Bindings for using the Imposter mock engine in JavaScript/Node.js.

Embed live HTTP mocks within your tests, based on OpenAPI specification files or plain REST APIs.

Usage

const {mocks} = require('@imposter-js/imposter');

// start a mock from an OpenAPI spec file on a specific port
await mocks.builder()
    .withPort(8080)
    .withOpenApiSpec('/path/to/openapi_spec.yaml')
    .start();

// call one of the endpoints defined in the OpenAPI spec
const response = await axios.get('http://localhost:8080/products');

// print JSON returned from the mock
console.log(response.data);

This is just a simple example. Your mocks can have dynamic responses, request validation against an OpenAPI schema, data capture, performance delays etc...

See the sample directory for a Node.js project with many examples.

Quickstart

Imposter is available as an npm package.

Install with npm:

npm install --save-dev @imposter-js/imposter

Or add to your package.json as a dev dependency:

"devDependencies": {
  "@imposter-js/imposter": "*"
}

See available versions on the npm registry

Prerequisites

Examples

See the sample directory for a Node.js project with many examples.

Example with Jest

Here's an example using Jest:

const {mocks} = require('@imposter-js/imposter');

jest.setTimeout(30000);

beforeAll(async () => {
    // path to Imposter config directory
    const configDir = `/path/to/order-api`;

    // start a mock on a specific port
    await mocks.start(configDir, 8080);
});

afterAll(async () => {
    mocks.stopAll();
});

it('places an order', async () => {
    // configure the unit under test
    const orderService = new OrderService('http://localhost:8080/orders');

    // call your unit under test, which invokes the mock
    const confirmation = await orderService.placeOrder('product-05');

    // assert values returned by the mock
    expect(confirmation.total).toEqual(18.00);
});

Example using just an OpenAPI file

Here's an example mock that just uses an OpenAPI file:

// start a mock from a bare OpenAPI spec file
// requests are validated against the spec
const mock = await mocks.builder()
    .withOpenApiSpec('/path/to/pet-names-api.yaml')
    .withRequestValidation()
    .start();

// call the mock
const response = await axios.get(`${mock.baseUrl()}/names`);

// Output: [ 'Fluffy', 'Paws' ]
// This is driven by either the 'examples' property
// in the OpenAPI spec, or the schema of the response.
console.log(response.data);

Example with no config file

Here's an example mock that doesn't require any configuration file:

const builder = mocks.builder().withPlugin('rest');

// add a POST resource with a path parameter
const resource = builder.addResource('/users/{userName}', 'POST');

// capture the userName path parameter from the request
// for later use in the response
resource.captures().fromPath('userName');

// respond with a templated message indicating the user
// was created by name
resource.responds(201)
    .withTemplateData('${request.userName} registered')
    .withHeader('Content-Type', 'text/plain');

// spin it up
const mock = await builder.start();

// call the mock
const response = await axios.post(`${mock.baseUrl()}/users/alice`);

// Output: alice registered
// This will vary dynamically, based on the request.
console.log(response.data);

Documentation

Features

  • run standalone mocks in place of real systems
  • turn an OpenAPI/Swagger file into a mock API for testing or QA (even before the real API is built)
  • decouple your integration tests from the cloud/various back-end systems and take control of your dependencies
  • validate your API requests against an OpenAPI specification

Send dynamic responses:

  • Provide mock responses using static files or customise behaviour based on characteristics of the request.
  • Power users can control mock responses with JavaScript.

Acknowledgements

This project is only possible thanks to the following: