Я перепробовал много методов поиска служб aws-sdk, которые я нашел в Интернете, но ни один из них не работал для меня, я даже попробовал модуль aws-sdk-mock
, но это не работает, и я думаю, что это потому что я не использую aws-sdk
в обработчике функций.
Я использую jest
в качестве тестера и утверждения, поэтому код, который у меня сейчас есть, выглядит следующим образом:
test.js
const aws = require('aws-sdk-mock');
const Admin = require('./../../../serverless/entities/Admin');
describe('Entity - Admin test', () => {
jest.spyOn(aws.CognitoIdentityServiceProvider.prototype, 'listUsersInGroup', () => {
return {
promise: Promise.resolve({ foo: 'bar' })
};
});
const data = Admin.getListOfUsers();
console.log(data);
});
Admin.js
/**
* Admin entity class
* This class should help managing all super user actions that are required for the sportstracker's application
* Amazon services used by this entity:
* - Cognito (User Pool)
* Required IAM Policy actions:
* - cognito-idp:ListUsersInGroup
* - cognito-idp:ListUsers
* - cognito-idp:AdminCreateUser
* - cognito-idp:AdminDeleteUser
* - cognito-idp:AdminGetUser
* - cognito-idp:AdminListGroupsForUser
* - cognito-idp:AdminUpdateUserAttributes
* - cognito-idp:AdminRemoveUserFromGroup
*/
const aws = require('aws-sdk');
const User = require('./../lib/User');
const cognito = new aws.CognitoIdentityServiceProvider();
const UserPoolId = process.env['COGNITO_USER_POOL_ID'];
const rolesMap = {
admin: 'SuperUser',
member: 'Member'
};
/**
* @typedef UsersList
* @property {Array<UserObject>} members - The list of members
* @property {Array<UserObject>} admins - The list of admins
*/
class Admin {
/**
* Gets a list of users for both admin and members.
* This executes 2 methods for aws.cognito [admin, member]
* @returns {Promise<UsersList>} - The object containing the list of members and admins
*/
static async getListOfUsers () {
const operations = [
cognito.listUsersInGroup({ UserPoolId, GroupName: rolesMap.admin }).promise(),
cognito.listUsersInGroup({ UserPoolId, GroupName: rolesMap.member }).promise()
];
const results = await Promise.all(operations);
return {
admins: results[0].Users.map(user => User.mapUserData(user)),
members: results[1].Users.map(user => User.mapUserData(user))
};
}
...
}
module.exports = Admin;
ошибка, которую я получаю для этого кода:
TypeError: Cannot read property 'prototype' of undefined
это потому, что прототип всех сервисов в SDK не имеет определенных методов до вызова конструктора, и я понимаю, почему они создали модуль, подобный aws-sdk-mock
, но даже этот модуль мне не помог, так как я могу сделать правильный способ издеваться над службами aws в не функциональном лямбда-обработчике?