2016-03-20 140 views
1

我有一個簡單的AWS的Node.js LAMBDA,我想用嘲笑來測試:嘲諷在AWS LAMBDA

//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返回 '大衛'

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) 

可以這樣做嗎?

回答

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'; 
} 
0

嘗試將simple.mock(lambda, 'getName').returnWith('Tim');設置爲beforeEach並刪除此lambda.getName.returnWith('Tim');

+0

不幸的是這沒有奏效 – AJ9