Mocha Test
Mocha Test는 Node.js 테스트 framework이다.
테스트에 필요한 구문의 형태를 편리하게 사용할 수 있는 기능들을 제공한다.
따라서 직관적인 테스트 코드를 구현할 수 있다.
테스트 수행 결과를 깔끔하게 출력해준다.
Mocha Test 설치
$ npm install mocha -g
// test.spec.js 파일
require('dotenv').config();
const { RTMClient } = require('@slack/rtm-api');
const fs = require('fs');
const channel = '<슬랙 채널 ID>';
let token;
try {
token = fs.readFileSync('./token').toString('utf-8');
} catch (err) {
console.error(err);
}
const rtm = new RTMClient(token);
(async () => {
await rtm.start().catch(console.error);
})();
const assert = require('assert');
const greeting = require('./greeting');
let res;
describe('테스트를 시작합니다.', async () => {
before(async () => {
res = await greeting(rtm, channel);
return res;
});
it('인사 모듈 테스트', (done) => {
console.log(res);
assert.equal(res, 'success');
done();
});
});
2022.11.12 - [프로젝트/슬랙봇(이제 CI를 곁들인)] - mocha 테스트에서 is undefined 에러날 때 해결 방법
여기서 airbnb 룰로 Lint가 자동 수정되는 것 때문에 깨나 고생을 했다.
arrow function을 사용할 때 return 문에서 =를 사용하면 모호해지기 때문에 ESLint에서는 arror function should not return assignment로 에러를 띄운다. 경고도 아니고 에러를 띄운다.
그래서 before문에서 return = res await greeting(rtm, channel)로 작성하지 않고 return문을 따로 빼주었다.
Lint랑 mocha 인식 못하는거랑 둘이 같이 에러가 뜨는 바람에 같은 에러인줄 알고 좀 헤맸는데 둘 다 해결했다.^^
테스트해보면 잘 동작한다.
$ mocha <파일명> --exit
--exit 옵션을 주면 테스트 후 자동으로 종료된다.
GitHub Action에 Mocha Test 연결하기
action을 새로 생성해주고 yaml 파일을 작성한다.
// mocha_test.yml
name: Mocha test
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- name: npm install, build, and test
run: |
npm install mocha -g
npm install dotenv
mocha test.spec.js --exit
env:
CI: true
push가 일어나면 트리거가 걸려서 job을 실행한다.
ubuntu에서 실행되며 Node.js 18.x 버전을 사용하고
$ npm install mocha -g
$ npm install dotenv
$ mocha test.spec.js --exit
명령을 한다.
mocha를 설치하고 dotenv를 설치하고 테스트를 실행한 후 끝나면 자동으로 종료한다.
참고
https://stackoverflow.com/questions/30018271/javascript-standard-style-does-not-recognize-mocha
https://velog.io/@malgam/error-Arrow-function-should-not-return-assignment