Simple External API Mocking via Sinon
So why another testing utility library for mocking HTTP servers? Because:
- We love sinon
- We wanted to love functional tests, but nock was unideal
- We thought, "Hey wouldn't it be cool if we could mock APIs with sinon?"
const MockAPI = require('mehpi')
const request = require('request')
const sinon = require('sinon')
describe('functional tests', () => {
// Create a new mock api for github (localhost:5678)
const github = new MockAPI('5678')
// Start the API before all tests, stop it when we're done
before((done) => github.start(done))
after((done) => github.stop(done))
// Setup some route stubs for the API
beforeEach(() => {
github.stub('GET', '/users/rsandor').returns(200)
github.stub('GET', '/repos/rsandor/solace/comments').returns({
status: 500,
body: 'Internal Server Error'
})
github.stub('POST', '/gists')
.onFirstCall().returns(500)
.onSecondCall().returns(200)
})
// Restore all route stubs after each test
afterEach(() => {
github.restore()
})
// Write a test!
it('should call github', (done) => {
const getUsers = github.stub('GET /users/:username')
request.get('http://localhost:5678/users/rsandor', function () {
sinon.assert.calledOnce(getUsers)
done()
})
})
})
Creates a new MockAPI
instance that runs locally on the given port.
Starts the server, then calls the done
callback.
Stops the server. If defined, calls the done
callback.
Creates and returns a sinon stub for the given HTTP method and path.
Restores all route stubs on the mocked server.
MIT