git

github actions node.js test

github actions?

GitHub Actions을 사용하면 workflow를 통해 build, test, deploy를 자동화 할 수 있습니다. 자세한 정보는 githubAction에서 확인 할 수 있습니다.

github actions을 통한 node.js CI 사용방법

exampleRepo를 통하여 코드를 볼 수 있습니다.

1
2
3
4
5
6
7
|____node-docker-example
| |____test.js
| |____README.md
| |____.gitignore
| |____package-lock.json
| |____package.json
| |____app.js

레포의 구조는 위와 같이 생성되어있습니다.

1
2
3
4
5
6
7
8
9
10
const express = require("express");

const app = express();
const port = 8080;

app.get("/", (req, res) => res.send("Hello World!"));

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

module.exports = app;

app.js에는 '/'에서 get요청에 Hello World!텍스트를 리턴하도록 작성하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
const supertest = require("supertest");
const expect = require("chai").expect;
const app = require("./app");
const agent = supertest.agent(app);

describe("node docker test", () => {
it("get test", () => {
return agent
.get("/")
.expect(200)
.then((res) => expect(res.text).to.be.equal("Hello World!"));
});
});

test.js에선 루트로 요청했을 때 Hello World!텍스트가 잘 리턴하는지 체크하는 테스트코드를 작성하였습니다.

github에서 테스트 할 레포로 이동하여 actions으로 이동합니다.

New workflow를 선택하여 이동 후 node.jsSet up this workflow를 선택합니다.

위와 같이 node.js의 기본 workflow를 볼 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: Nodejs example CI

on:
push:
branches: [ master ]

jobs:
build:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [10.x, 12.x]

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm test
env:
CI: true


name은 위 사진과 같이 workflow의 이름을 설정하는 부분입니다.
on은 이벤트의 변경사항을 캐치하는 부분입니다. 위와 같이 master브렌치의 push이벤트가 발생하면 다음 절차가 실행됩니다.
jobs는 하나의 인스턴스에서 여러 step을 그룹시켜 실행합니다.
runs-on은 어느 환경에서 실행 할지 지정합니다.
steps는 순차적으로 명령을 실행합니다. 위 코드에선 node mode10.x버전과 12.x버전을 각각 실행합니다. 각 버전에서 npm package를 설치 후 테스트를 진행합니다.

공유하기