代码之家  ›  专栏  ›  技术社区  ›  Mark Sandman

在我的Node.JS项目中测试不按预期工作的AWS服务时的sinon.spy

  •  0
  • Mark Sandman  · 技术社区  · 6 年前

    在Node.JS项目(Angular5项目的后端)中,我创建了一个处理AWS身份验证的服务。。。我叫这个 awsAuthenticationService awsAuthenticationService.js 我有以下方法,该方法具有一些次要逻辑,然后调用 cognitoIdentityServiceProvider ". 这是我的一段代码(我真的减少了这个)

    constructor() {
        this._cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider(this.cognitoConfig);
    }
    
    toggleUserAccess(userName, type) {
        const params = {
          Username: userName,
          UserPoolId: this.cognitoConfig.userPoolId
        };
    
        if (type === null) {
          return this._cognitoIdentityServiceProvider.adminEnableUser(params).promise();
        }
        return this._cognitoIdentityServiceProvider.adminDisableUser(params).promise();
    }
    

    从中可以看到 toggleUserAccess 我们传递一些参数,确定它们是什么,然后调用适当的方法。我希望通过一个单元测试来测试它,该单元测试将调用 authenticationService.toggleUserAccess ,传递一些参数并监视 authenticationService._cognitoIdentityServiceProvider

    let authenticationService = require('./awsAuthenticationService');
    
            describe('toggleUserAccess', () => {
            beforeEach(() => {
              authenticationService._cognitoIdentityServiceProvider = {
                adminDisableUser(params) {
                  return {
                    promise() {
                      return Promise.resolve(params);
                    }
                  };
                }
              };
    
              authenticationService._cognitoIdentityServiceProvider = {
                adminEnableUser(params) {
                  return {
                    promise() {
                      return Promise.resolve(params);
                    }
                  };
                }
              };
            });
    
            it('should call adminEnableUser if the type is null', () => {
              authenticationService.toggleUserAccess('TheUser', null);
    
              const spyCognito = sinon.spy(authenticationService._cognitoIdentityServiceProvider, 'adminEnableUser');
              expect(spyCognito.calledOnce).to.equal(true);
            });
    
            it('should call adminDisableUser if the type is null', () => {
              authenticationService.toggleUserAccess('TheUser', '0001');
    
              const spyCognito = sinon.spy(authenticationService._cognitoIdentityServiceProvider, 'adminDisableUser');
              expect(spyCognito.calledOnce).to.equal(true);
            });
          });
    

    我的考试不及格,我想我已经准备好了 sinon.spy 不正确-有人能看出我做错了什么吗?或者请给我建议

    1 回复  |  直到 6 年前
        1
  •  0
  •   deerawan    6 年前

    存根类 AWS.CognitoIdentityServiceProvider ,需要用它的存根 prototype 关键字。

    // add require statement for your AWS class    
    
    const spyCognito = sinon.spy(AWS.CognitoIdentityServiceProvider.prototype, 'adminDisableUser');
    expect(spyCognito.calledOnce).to.equal(true);
    

    希望有帮助