【发布时间】:2022-11-19 03:17:10
【问题描述】:
我有一个使用 AWS sdk source 的函数:
import {
SignUpCommand,
CognitoIdentityProviderClient,
} from "@aws-sdk/client-cognito-identity-provider";
import { createClientForDefaultRegion } from "../../libs/utils/util-aws-sdk.js";
const signUp = async ({ clientId, username, password, email }) => {
const client = createClientForDefaultRegion(CognitoIdentityProviderClient);
const command = new SignUpCommand({
ClientId: clientId,
Username: username,
Password: password,
UserAttributes: [{ Name: "email", Value: email }],
});
return client.send(command);
};
现在我想为这个功能编写单元测试。我从这样的事情开始:
describe('cognito', () => {
it('should sign up a user', async () => {
const clientId = '42'
const username = 'tony.stark@example.com'
const password = '1@m1r0nm@n'
const expected = { UserConfirmed: true, UserSub: '1234567890'}
const cognito = jest.mock('@aws-sdk/client-cognito-identity-provider')
const result = await signUp(clientId, username, password)
expect(result).toMatchObject(expected)
})
})
我如何模拟 AWS SDK 中的类,以便此函数中的 new 命令返回在我的测试中创建的模拟对象?
附:自从发布这个问题后,我找到了this answer,但我实现它的尝试还没有完成。我有以下模拟:
jest.mock('@aws-sdk/client-cognito-identity-provider', () => {
return {
CognitoIdentityProvider: class {
send() {
return new Promise((resolve, reject) => {
resolve(expected)
})
}
},
SignUpCommand: class {}
}
})
但我的测试似乎仍然调用 aws sdk 中的实际实现。
【问题讨论】:
标签: javascript jestjs mocking aws-sdk-js