#node.js #unit-testing #jestjs #mocking #aws-sdk
#node.js #модульное тестирование #jestjs #издевательство #aws-sdk
Вопрос:
Тестируемый код выглядит следующим образом.
handler.js
const aws = require('aws-sdk');
const eventBridge = new aws.EventBridge();
const testHandler = async event => {
// some code
// ...
await sendEvent(data)
// ...
// some code
}
const promisify = foo => new Promise((resolve, reject) => {
foo((error, result) => {
if (error) {
reject(error)
} else {
resolve(result)
}
})
})
const sendEvent = (data) => promisify(callback =>
eventBridge.putEvents({
Entries: [
{
Detail: JSON.stringify({
'data': data,
}),
DetailType: 'test-detail-type',
EventBusName: 'test-eventbus',
Resources: [],
Source: 'event.source.test'
}
]
}, callback))
.then((result) =>
console.log('Event is emitted.')
)
module.exports = {
testHandler: testHandler,
sendEvent: sendEvent
}
Мой тест выглядит следующим образом
handler.test.js
const handler = require('./handler');
const aws = require('aws-sdk')
jest.mock("aws-sdk");
aws.EventBridge.prototype.putEvents.mockImplementation((_, cb) => {
cb(null, {});
});
describe('test sendEvent', () => {
beforeEach(() => {
jest.resetModules()
});
test('send event success', async () => {
const data = 'sample'
const result = await handler.sendEvent(data);
expect(result).toBeUndefined();
});
});
Ошибка жалуется, что mockImplementation вызывается неопределенным putEvents
Ошибка типа: не удается прочитать свойство ‘mockImplementation’ неопределенного
ошибка
TypeError: Cannot read property 'mockImplementation' of undefined
> 14 | aws.EventBridge.prototype.putEvents.mockImplementation((_, cb) => {
| ^
15 | cb(null, {});
16 | });
17 |
Однако, если я использую jest.fn() напрямую без mockImplementation следующим образом, тест проходит без ошибок.
aws.EventBridge.prototype.putEvents = jest.fn((_, cb) => {cb(null, {})})
Просто интересно, должно ли это быть поведение или я что-то не так понимаю?