Skip to content

Micro-service testing stubs built around Express, Sinon and EventEmitter

License

Notifications You must be signed in to change notification settings

michaloo/mini-application

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mini Application

Express app and sinon mocks to the rescue!

CircleCI Status CodeCov

Installation

npm i mini-application --save

yarn add -S mini-application

const MiniApplication = require("mini-application")
const miniApp = new MiniApplication();

Stub

What happens when you wrap Express middleware with Sinon stub? See below:

Stub simple endpoint

const MiniApplication = require("mini-application")
const miniApp = new MiniApplication();

miniApp.stubApp("/test").respond((req, res) => {
  res.end("ok!");
});

miniApp.listen(3000)
.then(() => {
  rp.get("http://localhost:3000/test")
    .then((response) => {
      assert(response.body === "ok!");
    });
});

Stub different responses

miniApp.stubApp("/test")
  .onFirstCall()
  .respond((req, res) => res.end("first response"))
  .onSecondCall()
  .respond((req, res) => res.end("second response"));

Stub specific method only

miniApp.stubApp("post", "/test").respond((req, res) => res.end("on post call only"));

Use sinon helper

// respond with json
miniApp.stubApp("/test").respond({ text: "json response" });
// or set the status code
miniApp.stubApp("/test").respond(503);
// or just send a text
miniApp.stubApp("/test").respond("ok");

Events

It's often helpful to get nice callback the verify the expectations

Simple event emitted for path

request.get("http://localhost:3000/test").end();
miniApp.on("incoming.request@/test", (req) => {
  expect(req.url).to.be.equal("/test");
  done();
});

Interactive

Sometimes it's hard to write a good test without manual verification first. Miniapp should help here too:

bin/mini-application
miniApp - listening on 3000
miniApp > stubApp("/").respond("ok")
# now open http://localhost:3000/ in the browser to see the response
# then you can inspect all requests which were made to the miniApp instance:
miniApp > requests.get("incoming").value()

Extendable

For easier testing custom logic can be wrapped as a class extending the MiniApplication base:

class TestApplication extends MiniApplication {
  constructor(options) {
    super(options);
    this.stubApp("get", "test");
  }
}

miniApp = new TestApplication();
miniApp.listen(3000)
  .then(() => {
    request.get("http://localhost:3000/test").end();
    miniApp.on("incoming.request@GET/test", (req) => {
      expect(req.url).to.be.equal("/test");
    });
  });

About

Micro-service testing stubs built around Express, Sinon and EventEmitter

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published