как заглушить класс функциями с помощью Sinon. js - PullRequest
0 голосов
/ 05 августа 2020

как имитировать создание класса 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

...