【发布时间】:2021-12-26 19:58:09
【问题描述】:
我目前正在尝试模拟 AWS SecretsManager 以使用 Jest 进行单元测试,每次我遇到 ConfigError
我的代码有点像这样
//index.ts
import SM from "aws-sdk/clients/secretsmanager"
const secretManagerClient = new SM()
...
export const randomMethod = async (a: string, b: string) => {
let secret
const personalToken = {
SecretId: process.env.secretId,
}
secretManagerClient
.getSecretValue(personalToken, (err, data) => {
if (err) {
console.error(`[SECRETS MANAGER] Error fetching personal token : ${err}`)
} else if (data && data.SecretString) {
secret = data.SecretString
}
})
}
我的模拟是这样的:
//index.test.js
const mockGetSecretValue = jest.fn((SecretId) => {
switch (SecretId) {
case process.env.GITHUB_PERSONAL_TOKEN:
return {
SecretString: process.env.GITHUB_PERSONAL_TOKEN_VALUE,
}
default:
throw Error("secret not found")
}
})
jest.mock("aws-sdk/clients/secretsmanager", () => {
return jest.fn(() => {
return {
getSecretValue: jest.fn(({ SecretId }) => {
return mockGetSecretValue(SecretId)
}),
promise: jest.fn(),
}
})
})
但是,我收到了这个错误:ConfigError: Missing region in config,我在一定程度上理解,但是我不明白为什么它会出现在模拟部分......
提前致谢!
编辑:感谢第一个答案,我已经设法停止出现此错误。但是,getSecretValue() 方法没有返回我想要的 Secret 值。
【问题讨论】:
-
secretManagerClient是从哪里来的?你是怎么初始化的? -
secretManagerClient在方法之外,在文件顶部初始化。我已经编辑了代码以显示这一点。
标签: node.js unit-testing jestjs mocking aws-sdk