在AWS Lambda中嘲弄

我有一个简单的AWS Node.js Lambda,我想用mocks来testing:

//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); }); }); }); 

输出仍然build议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) 

可以这样做吗?

你需要导出你的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'; } 

尝试把simple.mock(lambda, 'getName').returnWith('Tim');beforeEach并删除这个lambda.getName.returnWith('Tim');