I am struggling to jest mock the below method. Not able to mock. Please see my test case below it. Test case fails with error
TypeError: XXXXXXX is not a
Here is the unit test solution:
index.ts
:
import { Lambda } from 'aws-sdk';
import fsReadFilePromise from 'fs-readfile-promise';
export class AWSLambdaDeployer {
private readonly mylambda: Lambda;
constructor(lambda: Lambda) {
this.mylambda = lambda;
}
public async deploy(zipPath: string, fName: string) {
const fileData = await fsReadFilePromise(zipPath);
const params: Lambda.Types.UpdateFunctionCodeRequest = {
FunctionName: fName,
ZipFile: fileData,
Publish: true,
};
return this.mylambda.updateFunctionCode(params).promise();
}
}
index.spec.ts
:
import { AWSLambdaDeployer } from './';
import fsReadFilePromise from 'fs-readfile-promise';
import AWS from 'aws-sdk';
jest.mock('aws-sdk', () => {
const mLambda = {
updateFunctionCode: jest.fn().mockReturnThis(),
promise: jest.fn(),
};
return {
Lambda: jest.fn(() => mLambda),
};
});
jest.mock('fs-readfile-promise', () => jest.fn());
describe('59463491', () => {
afterEach(() => {
jest.resetAllMocks();
jest.restoreAllMocks();
});
it(' functionality under test', async () => {
(fsReadFilePromise as any).mockResolvedValueOnce('get it done');
const lambda = new AWS.Lambda();
const awslambdaDeployer = new AWSLambdaDeployer(lambda);
await awslambdaDeployer.deploy('filePath', 'workingFunction');
expect(fsReadFilePromise).toBeCalledWith('filePath');
expect(lambda.updateFunctionCode).toBeCalledWith({
FunctionName: 'workingFunction',
ZipFile: 'get it done',
Publish: true,
});
expect(lambda.updateFunctionCode().promise).toBeCalledTimes(1);
});
});
Unit test result with 100% coverage:
PASS src/stackoverflow/59463491/index.spec.ts (10.592s)
59463491
✓ functionality under test (9ms)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 12.578s, estimated 13s
Source code: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59463491