2016-03-20 18 views
1

Ich habe ein einfaches AWS Node.js Lambda, die Ich mag würde mit Mocks testen:Mocking in AWS Lambda

//SimpleLambda.js 

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

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

function getName() { 
    return 'David'; 
} 

ich installiert habe mocha und simple-mock, aber ich bin nicht in der Lage, dies zu Arbeit bekommen :

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

    }); 
    }); 
}); 

Ausgabe schlägt noch getName gibt '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) 

Kann das gemacht werden?

Antwort

1

Sie müssen Ihre getName-Funktion exportieren, sodass sie von test.js aus zugänglich ist (und von Ihrer spöttischen Bibliothek umschlossen werden kann).

Etwas wie folgt aus:

//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

Versuchen Sie, simple.mock(lambda, 'getName').returnWith('Tim'); auf beforeEach zu setzen und löschen Sie diese lambda.getName.returnWith('Tim');.

+0

Leider hat dies nicht funktioniert – AJ9