Я пытаюсь протестировать лямбда-функцию AWS (node.js), созданную с помощью AWS SAM. Моя функция использует модуль npm serverless-mysql
для подключения к Авроре. Ниже приведены соответствующие части моей лямбда-функции:
const connection = require('serverless-mysql')({
config: {
host : process.env.DB_HOST,
user : process.env.DB_USER,
password : process.env.DB_PASSWORD
}
});
exports.lambdaHandler = async (event, context) => {
try {
const name = event.pathParameters.name;
const rows = await connection.query('SELECT * FROM users WHERE name = ?', [name]);
await connection.end()
const user = rows[0];
return {
'statusCode': 200,
'body': JSON.stringify({
firstName: user.first_name,
lastName: user.last_name,
bk: user.bk,
team: user.current_team
})
}
} catch (err) {
console.log(err);
return err;
}
};
Я пытаюсь проверить это, высмеивая зависимость serverless-mysql
, но в настоящее время я не могу это сделать. Мой тест выглядит так:
const app = require('../../app.js');
const chai = require('chai');
const sinon = require('sinon');
const expect = chai.expect;
const event = {
pathParameters: {
name: 'johndoe'
}
}
var context;
var successConnectionObject = {
connect: function() {
return Promise.resolve();
},
query: function(sqlQuery, params) {
return Promise.resolve('');
},
end: function() {}
}
var mysql = require('serverless-mysql');
var stub = sinon.stub(mysql, 'connect').returns(successConnectionObject);
describe('Tests', function () {
it('verifies successful response', async () => {
const result = await app.lambdaHandler(event, context);
expect(result).to.be.an('object');
expect(result.statusCode).to.equal(200);
mock.verify();
mock.restore();
});
});
Однако возвращается следующая ошибка:
TypeError: Cannot stub non-existent own property connect
Я верю, что это потому, что mysql
не создан. Поэтому я заменил строку var mysql = require('serverless-mysql');
на:
var mysql = require('serverless-mysql')();
К сожалению, это приводит к следующей ошибке:
AssertionError: expected [Error: Error: self signed certificate in certificate chain] to be an object
Так что, похоже, метод connect()
реального модуля serverless-mysql
вызывается.
Как я могу правильно издеваться serverless-mysql
с помощью sinon?