Test a command
The CLI tool will automatically create a unit test file for added commands.
Generated unit test files expecting the usage of Jest, or an API compatible test framework.
For stubbing and mocking, Sinon.js will be used.
A generated test file looks like this:
import { getCommandContextMock, getEventBridgeMock, getLoggerMock } from '@purista/core'
import { createSandbox } from 'sinon'
import { userV1Service } from '../../userV1Service'
import { signUpCommandBuilder } from './signUpCommandBuilder'
import { UserV1SignUpInputParameter, UserV1SignUpInputPayload } from './types'
describe('service User version 1 - command signUp', () => {
let sandbox = createSandbox()
beforeEach(() => {
sandbox = createSandbox()
})
afterEach(() => {
sandbox.restore()
})
test('does not throw', async () => {
const service = userV1Service.getInstance(getEventBridgeMock(sandbox).mock, { logger: getLoggerMock(sandbox).mock })
const signUp = signUpCommandBuilder.getCommandFunction().bind(service)
const payload: UserV1SignUpInputPayload = undefined
const parameter: UserV1SignUpInputParameter = {}
const context = getCommandContextMock(payload, parameter, sandbox)
const result = await signUp(context.mock, payload, parameter)
expect(result).toBeUndefined()
})
})
A Sinon.js sandbox is created before and restored after each single test.
Using a sandbox allows to clean everything after each test, even if the test has failed.
The test itself is pretty straight-forward.
For testing our command function, we will simply call the function.
A command function is running in the this
-scope of the service. Because of this, we need a instance of the service.
For creating a service instance, an event bridge instance is needed.
Also, the command function is called with a command function context.
PURISTA provides some helpers for creating mocks and stubs.
Because of this, creation of the event bridge instance, the service instance and function context is pretty easy.
Now, the command function can be called with some test data input.
The result can now be tested and validated.
Test helper
You can find a list of test helper can be found in the API documentation: Unit test helper.
There are also some helpfull general helper functions available.
They can help developers to create test data.
You can find them in the API documentation: Helper
Mocks
PURISTA comes with some simple mocks, which should developers help to write tests fast and simple.
In general, the mock helper will work similar.
As optional input, a Sinon.js sandbox can be provided.
Mock creation helpers will return a object with the two properties mock
and stubs
.
The mock
property contains the mocked instance or object.
The stubs
property returns the Sinon.js stubs, used in the mocked instance or object.
Example:
const mockedLogger = getLoggerMock(sandbox)
mockedLogger.mock.error('error')
expect(mockedLogger.stubs.error.calledWith('error'))