как имитировать создание класса Cognito под названием CognitoUser для выполнения модульного теста?
Файловый адаптер
const updatePasswordCognito = async ({ userName, password, newPassword }) => {
const authenticationDetails = new awsCognito.AuthenticationDetails({
Username: userName,
Password: password,
});
const cognitoUser = await createCognitoUser({ userName });
return new Promise((resolve, reject) => {
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess() {
cognitoUser.changePassword(password, newPassword, (err, result) => {
if (err) {
reject(err);
}
resolve(result);
});
},
onFailure(err) {
reject(err);
},
});
});
};
Файл spe c. js
'use strict'
const { expect } = require('chai');
const sinon = require('sinon');
const jwt = require('jsonwebtoken');
const iamWrapper = require('../../../../../anypath');
let mockDependencies;
const config = {
userPoolId: 'test',
clientId: 'test',
};
class CognitoUser {
constructor(text) {
this.text = text;
}
authenticateUser() {
return { code: 'test' };
}
}
describe('Unit tests for iam adapter', () => {
beforeEach('create mock', () => {
mockDependencies = {
config,
jwt,
awsCognito: {
CognitoUser,
},
};
});
context('update password cognito', () => {
it('password success', async () => {
const userName = '12345678910';
const password = '102030';
const newPassword = '102040';
const result = await iamWrapper(mockDependencies).updatePasswordCognito({ userName, password, newPassword });
expect(result).to.be.an('object');
expect(result).to.have.property('corporateId');
});
it('should return error', async () => {
const result = await iamWrapper(mockDependencies).updatePasswordCognito(mockDependencies);
expect(result).to.be.an('object');
expect(result).to.have.property('statusCode');
});
});
});
Это происходит при создании экземпляра объекта awsCognito.CognitoUser()
, не содержащего функцию AuthenticateUser и возвращающего значение undefined.
TypeError: невозможно прочитать свойство «AuthenticateUser» из undefined