Sinon Mocking (ts-sinon)
Utilities for making testing NestJS applications easier.
Getting Started
bash
npm install @golevelup/ts-sinon -D
bash
yarn add @golevelup/ts-sinon -D
bash
pnpm add @golevelup/ts-sinon -D
Creating Mocks
- Import the
createMock
function into your test class. - Create a variable and set it equal to the
createMock
function with its generic type input. - Use the mock, Luke.
Here's an example with NestJS' ExecutionContext
:
ts
import { createMock } from '@golevelup/ts-sinon';
import { ExecutionContext } from '@nestjs/common';
describe('Mocked Execution Context', () => {
it('should have a fully mocked Execution Context', () => {
const mockExecutionContext = createMock<ExecutionContext>();
expect(mockExecutionContext.switchToHttp()).toBeDefined();
});
});
createMock
generates all sub-properties as sinon.stub()
, so you can chain method calls:
ts
it('should correctly resolve mocked providers', async () => {
const request = {
key: 'val',
};
mockExecutionContext.switchToHttp.returns(
createMock<HttpArgumentsHost>({
getRequest: () => request,
}),
);
const mockResult = mockExecutionContext.switchToHttp().getRequest();
expect(mockResult).toBe(request);
});
You can also easily provide your own mocks:
ts
const mockExecutionContext = createMock<ExecutionContext>({
switchToHttp: () => ({
getRequest: () => ({
headers: {
authorization: 'auth',
},
}),
getResponse: sinon.stub().returns({ data: 'res return data' }),
}),
});
Note
When providing your own mocks, the number of times a parent mock function was called includes the times needed to set your mocks.