【问题标题】:Mocking in AWS Lambda在 AWS Lambda 中模拟
【发布时间】:2016-03-20 23:37:25
【问题描述】:

我有一个简单的 AWS Node.js Lambda,我想使用 mocks 对其进行测试:

//SimpleLambda.js

var AWS = require('aws-sdk');

exports.handler = function(event, context) {
  var name = getName();
  context.succeed(name);
};

function getName() {
  return 'David';
}

我已经安装了mochasimple-mock,但我无法让它工作:

//test.js

//Mocha
var assert = require('assert');
//Chai
var chai = require('chai');
var expect = chai.expect;
var should = chai.should();
//Simple-Mock
var simple = require('simple-mock');
//Lambda
var lambda = require('../SimpleLambda');

describe('SimpleLambda tests', function() {
  describe('Get name', function() {

    beforeEach(function() {
      simple.mock(lambda, 'getName');
    });

    it('should return \'Tim\' when the mocked with simple-mock', function() {
      lambda.getName.returnWith('Tim');

      var context = {
        invokeid: 'invokeid',
        succeed: function(result) {
          expect(result).to.equal("Tim");
          return result;
        }
      };

      lambda.handler({}, context);

    });
  });
});

输出仍然表明 getName 返回 'David'

  SimpleLambda tests
    Get name
      1) should return 'Tim' when the mocked with simple-mock


  0 passing (11ms)
  1 failing

  1) SimpleLambda tests Get name should return 'Tim' when the mocked with simple-mock:

  AssertionError: expected 'Succesfully retrieved: David' to equal 'Tim'
  + expected - actual

  -Succesfully retrieved: David
  +Tim

  at Object.context.succeed (test/test.js:27:29)
  at Object.exports.handler (SimpleLambda.js:5:11)
  at Context.<anonymous> (test/test.js:32:14)

这个可以吗?

【问题讨论】:

    标签: javascript node.js amazon-web-services testing aws-lambda


    【解决方案1】:

    您需要导出您的 getName 函数,以便可以从 test.js 访问它(并且可以被您的模拟库包装)。

    类似这样的:

    //SimpleLambda.js
    
    var AWS = require('aws-sdk');
    
    exports.handler = function(event, context) {
     var name = exports.getName();
     context.succeed(name);
    };
    
    exports.getName = function (){
      return 'David';
    }
    

    【讨论】:

      【解决方案2】:

      尝试将simple.mock(lambda, 'getName').returnWith('Tim'); 放入beforeEach 并删除此lambda.getName.returnWith('Tim');

      【讨论】:

        猜你喜欢
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-02
        • 1970-01-01
        • 2022-11-06
        • 1970-01-01
        • 2015-06-08
        相关资源
        最近更新 更多