【发布时间】:2021-09-13 21:58:27
【问题描述】:
我正在尝试在我的项目中模拟一些 AWS 服务,我已将它们放在文件夹 mocks
中例如
__mocks__
|__ aws-sdk.ts
所以在 aws-sdk.ts 中
export const getFn = jest
.fn()
.mockImplementation(() => ({ promise: ssmGetParameterMockResponse }))
export class SSM {
getParameter = getFn
}
aws_sdk.SSM = SSM
module.exports = aws_sdk
ssmGetParameterMockResponse 在另一个模拟数据文件中,其值为
export const ssmGetParameterMockResponse = jest.fn().mockReturnValue(
Promise.resolve({
Parameter: {
Value: JSON.stringify({
Endpoint: 'http://abcdef.com',
AppToken: 'AppToken',
UserToken: 'UserToken',
Name: 'Bleh',
}),
},
})
)
在我的 ts 文件中
const ssm = new AWS.SSM()
const credentials = ssm
.getParameter({
Name: String(CRED),
})
.promise()
.then(({ Parameter }) => JSON.parse(Parameter?.Value || '{}'))
const { Endpoint, UserToken, AppToken, Name } = await credentials
在我的测试文件中,当我尝试这个测试用例时,一切正常,我的模拟数据来自我的 mocks 文件夹,该文件夹使用来自 ssmGetParameterMockResponse 的数据,但是有一些测试用例我必须覆盖从 ssmGetParameterMockResponse 提供的值,我的意思是我必须删除属性“名称”以检查代码是否失败并正确捕获它们,
我在我的特定测试用例中尝试了以下方法,我想删除 name 属性
const spyyy = jest.spyOn(mock, 'ssmGetParameterMockResponse')
spyyy.mockReturnValue(
Promise.resolve({
Parameter: {
Value: JSON.stringify({
Endpoint: 'http://abcdef.com',
AppToken: 'AppToken',
UserToken: 'UserToken',
}),
},
})
)
但是我仍然无法正确获取详细信息,还有其他方法可以覆盖模拟吗???
【问题讨论】:
标签: typescript amazon-web-services unit-testing mocking ts-jest