【发布时间】:2022-01-09 20:07:02
【问题描述】:
我在 middy 中使用 http 请求函数作为处理函数,然后在发起 http 请求之前使用 ssm 中间件获取一些 ssm 参数。 像这样:
const makeThirdPartyServiceRequest = middy(async ({ params }) => {
logger.info(`SENDING Request to ${endpoint} API`)
const url = `https://someurltoathirdpartyservice`
const options = {
method: 'POST',
body: params
}
return helpers.makeRequest(url, options)
})
makeThirdPartyServiceRequest.use(ssm(......))
然而,在我开玩笑的单元测试中,我试图模拟 makeThirdPartyServiceRequest 并明确表示它应该解析为一个值:
jest.mock('../src/thirdPartyService', () => ({
__esModule: true,
default: {
...(jest.requireActual('../src/thirdPartyService') as { default: {} }).default,
makeThirdPartyServiceRequest: jest.fn()
}
}))
export {}
import thirdPartyService from '../src/thirdPartyService'
然后在测试中我说:
describe('makeThirdPartyServiceRequest()', () => {
it('should makeThirdPartyServiceRequest', async () => {
// Given
// })
const mockedThirdPartyServiceRequest = mocked(thirdPartyService.makeThirdPartyServiceRequest).mockResolvedValue({})
// When
const result = await thirdPartyService.makeThirdPartyServiceRequest(something)
// Then
expect(mockedThirdPartyServiceRequest).toHaveBeenCalledTimes(1)
expect(mockedThirdPartyServiceRequest.mock.calls[0][0].params.toString()).toBe(expectedParams)
})
})
但是由于某种原因,middy 中间件仍在被调用,这显然是我不想要的,我试图嘲笑......我做错了什么?
【问题讨论】:
-
@middy 中的每个包都有许多示例,说明如何在
__tests__文件夹 (github.com/middyjs/middy/tree/main/packages) 中执行此操作。在 v2.x 中切换到ava之前,middy 的 v1.x 使用了jest。
标签: javascript node.js aws-lambda jestjs middy