Serverless Framework에서 수행하는 지속적인 통합 권장
12191 단어 람다serverlessunittestAWS
개요
서버리스 구성으로 서비스를 구축할 때 유용한 Serverless Framework 하지만 코어에서 유닛 테스트를 돌리는 방법은 제공되지 않습니다. 직접 테스트 프레임 워크를 정의해야합니다. 이번은 그 방법의 소개입니다.
테스트할 Lambda 함수 만들기
다음 명령으로 Lambda 함수를 만듭니다. 이번에는 예로 hello라는 함수를 만들어 보겠습니다.
$ serverless function create hello
그러면 다음과 같은 디렉토리 구성이 완성됩니다.
├── hello
│ ├── event.json
│ ├── handler.js
│ └── s-function.json
handler.js
가 실제로 Lambda로 실행되는 파일이지만 초기 상태에서는 다음과 같은 내용으로 되어 있습니다.module.exports.handler = function(event, context, cb) {
return cb(null, {
message: 'Go Serverless! Your Lambda function executed successfully!'
});
};
실행시키면 아래와 같이
Go Serverless! Your Lambda function executed successfully!
라는 메세지가 돌아옵니다.UnitTest의 구성 만들기
이번에는 JavaScript 테스팅 프레임 워크로 유명한
mocha
와 chai
를 사용합니다.먼저 Serverless 프로젝트에 설치합니다.
--save-dev
옵션을 지정하여 package.json의 devDependencies에 등록하는 것이 좋습니다.$ npm install chai --save-dev
$ npm install mocha --save-dev
tests/all.js
라는 파일을 프로젝트의 루트 계층 구조로 만듭니다.├── hello
│ ├── event.json
│ ├── handler.js
│ └── s-function.json
└── tests
└── all.js
테스트 코드는 다음과 같습니다.
테스트 코드 내에서 Lambda 함수를 실행하여 반환 값을 비교합니다.
tests/all.js
'use strict';
// Unit tests for Serverless
// Generated by Serverless UnitTestBoilerplate
var s
const path = require('path'),
chai = require('chai'),
should = chai.should(),
Serverless = require('serverless')
describe('ServerlessProjectTest', function() {
beforeEach(function(done) {
this.timeout(0);
s = new Serverless();
s.init().then(function() {
s.config.projectPath = __dirname + '/../';
s.setProject(new s.classes.Project({
stages: {
dev: { regions: { 'ap-northeast-1': {} }}
},
variables: {
project: 'serverless-project',
stage: 'dev',
region: 'ap-northeast-1'
}
}));
s.getProject().setFunction(new s.classes.Function(
{
name:"hello",
runtime:"nodejs4.3"
},
__dirname + '/../hello/s-function.json'));
done();
});
});
describe('#funciton hello()', function() {
it('should be funciton hello success', function() {
return s.getProject().getFunction('hello').run('dev', 'ap-northeast-1', {})
.then(result => {
result.response.message.should.equal('Go Serverless! Your Lambda function executed successfully!')
});
});
});
});
그리고 package.json에 다음을 추가하면 준비 완료입니다.
├── package.json
├── hello
│ ├── event.json
│ ├── handler.js
│ └── s-function.json
└── tests
└── all.js
npm에서 전역 설치된 serverless에 path를 통과시키기 위해 export하고 있습니다.
package.json
"scripts": {
"test": "export NODE_PATH=`npm root -g` && mocha tests/all"
}
테스트를 실행해 봅시다.
npm test
결과 다음과 같이 올바르게 테스트되었습니다.Travis에서 실행
Travis에서 Git에 push한 타이밍에 테스트가 실행되도록 해 봅시다.
프로젝트의 루트 계층 구조에 .travis.yml을 설치합니다.
├── .travis.yml
├── package.json
├── hello
│ ├── event.json
│ ├── handler.js
│ └── s-function.json
└── tests
└── all.js
파일 내용은 다음과 같습니다.
.travis.yml
language: node_js
node_js:
- '4'
sudo: false
install:
- npm install -g serverless
- npm install
script:
- npm test
그리고, Travis측의 설정을 실시해, git에 push하면 이하와 같이 테스트를 실행해 주었습니다.
h tps://t 등ゔぃs-해. 오 rg / 호리케 37 / 세르 r ぇ r ぇ s-에서 p ぉ y 면 t cyc ぇ / 부이 lds / 136548908
이번 테스트 코드를 생성해주는 기능을 Serverless 플러그인으로 공개했습니다.
Serverless UnitTest Boilerplate로 게시되었습니다. 자세한 사용법은 README에 기재되어 있습니다. 흥미가 있는 분은 꼭 사용해 보세요!
Reference
이 문제에 관하여(Serverless Framework에서 수행하는 지속적인 통합 권장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/horike37/items/15bf675f973d30bb1f5c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)