Node.js 프로젝트에서 테스트를 위해서 Mocha Framework 적용
추가로 supertest, should, expect 등을 설치함.
추가로 supertest, should, expect 등을 설치함.
1. 설치
- Mocha는 Global Module이므로 관리자 권한으로 설치함.
baesunghan:~/git/dentalJobs$sudo npm install -g mocha
Password: /usr/local/bin/mocha -> /usr/local/lib/node_modules/mocha/bin/mocha /usr/local/bin/_mocha -> /usr/local/lib/node_modules/mocha/bin/_mocha mocha@2.2.5 /usr/local/lib/node_modules/mocha ├── escape-string-regexp@1.0.2 ├── supports-color@1.2.1 ├── growl@1.8.1 ├── commander@2.3.0 ├── diff@1.4.0 ├── debug@2.0.0 (ms@0.6.2) ├── jade@0.26.3 (commander@0.6.1, mkdirp@0.3.0) ├── mkdirp@0.5.0 (minimist@0.0.8) └── glob@3.2.3 (inherits@2.0.1, graceful-fs@2.0.3, minimatch@0.2.14)
baesunghan:~/git/dentalJobs$
|
일반계정으로 추가로 다음 모듈도 설치함.
baesunghan:~/git/dentalJobs$npm install supertest
baesunghan:~/git/dentalJobs$npm install should
baesunghan:~/git/dentalJobs$npm install expect
|
2. test dir 생성
- mocha 실행시 test dir 아래 테스트 모듈을 실행하게 됨
baesunghan:~/git/dentalJobs$mkdir test
baesunghan:~/git/dentalJobs$ll total 24 drwxr-xr-x 13 baesunghan staff 442 7 1 16:51 . drwxr-xr-x 18 baesunghan staff 612 6 22 09:31 .. drwxr-xr-x 13 baesunghan staff 442 7 1 13:55 .git -rw-r--r-- 1 baesunghan staff 12 6 29 00:07 .gitignore -rw-r--r-- 1 baesunghan staff 1576 6 9 16:21 app.js drwxr-xr-x 3 baesunghan staff 102 6 3 14:03 bin drwxr-xr-x 13 baesunghan staff 442 6 3 16:03 node_modules -rw-r--r-- 1 baesunghan staff 376 6 3 18:47 package.json drwxr-xr-x 5 baesunghan staff 170 6 3 14:03 public drwxr-xr-x 8 baesunghan staff 272 7 1 16:21 routes drwxr-xr-x 2 baesunghan staff 68 7 1 16:51 test -rw-r--r-- 1 baesunghan staff 0 6 8 10:34 todolist.TODO drwxr-xr-x 13 baesunghan staff 442 6 16 18:25 views
baesunghan:~/git/dentalJobs$
|
3. mocha.opts 생성
- mocha 실행을 위한 기본 환경 설정 파일
--require should
--require supertest --reporter list
--ui bdd
|
4. app.js
- 이미 만들어진 app 모듈
- express 로 만들어짐
- route에서 member.js를 require함
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var member = require('./routes/member');
var personal = require('./routes/personal');
var app = express();
|
5. member.js
- 로그인을 수행하는 로직
- client로 return 메시지는 {code:'0000', message:'SUCCESS!!!!'} or {code:'E002', message:'비밀번호가 틀립니다'} 등으로 구성됨
var CONSTS = require('./consts');
var express = require('express');
var router = express.Router();
var MemberProvider = require('./db/db-member.js').MemberProvider;
var memberProvider = new MemberProvider();
// 로그인
router.post('/loginc', function(req, res, next) {
console.log(req.body);
var vId = req.body.user_id;
var vPwd = req.body.password;
var datas = [vId, req.body.mem_type];
memberProvider.selectSingleQueryByID("selectInfo", datas, function(err, memberInfo) {
console.log(memberInfo);
var rtnDatas = CONSTS.getErrData('0000');
if (memberInfo == null) {
rtnDatas = CONSTS.getErrData('E001');
} else if (memberInfo.user_password != vPwd) {
rtnDatas = CONSTS.getErrData('E002');
}
console.log(rtnDatas);
res.send(rtnDatas);
});
});
|
6. consts.js
- 공통 상수/에러코드 정의
function define(name, value) {
Object.defineProperty(exports, name, {
value: value,
enumerable : true,
});
}
define("OFFICE_TYPE", {"PERSONAL": "P", "TOTAL":"T", "GOVERNMENT":"G"});
define("MEMBER_TYPE", {"PERSONAL": "B", "OFFICE": "C"});
define("ERROR_CODE", {
"0000": "SUCCESS!!!",
"E001": "일치하는 ID가 없습니다.",
"E002": "비밀번호가 틀립니다.",
"D001": "동일한 #1 #2가 이미 존재합니다.",
"D002": "DB에 접속할 수 없습니다. 시스템관리자에게 연락하세요.",
"ER_DUP_ENTRY": "Duplicate entry for key 'PRIMARY'!!!",
"ER_BAD_NULL_ERROR": "Column 'user_id' cannot be null",
});
function getErrData(key) {
console.log(key);
return {code: key, message : exports.ERROR_CODE[key]};
}
exports.getErrData = getErrData;
|
7. test.js
- Mocha 테스트 모듈
- supertest, expect, should를 모두 테스트 용으로 사용함.
- http 호출은 Async 모드로 수행해함. 그러므로 it('로그인 성공', function(done) 로 해야함.
var should = require('should');
var assert = require("assert")
var request = require("supertest");
var expect = require("chai").expect;
var server = require("../app.js");
describe("회원 가입,로그인 테스트 ->", function() {
var svr = "http://localhost:4000";
before(function() {
server.listen(4000);
});
describe("치위생사 ->", function() {
it ("로그인 성공", function(done) {
var data = {
user_id : "e",
password : "e",
mem_type : 'C'
};
request(svr)
.post("/member/loginc")
.send(data)
.expect(200)
.end(function(err, res) {
if (err) return done(err);
res.body.code.should.be.equal('0000');
done();
});
});
it ("로그인 실패", function(done) {
var data = {
user_id : "e",
password : "ea",
mem_type : 'C'
};
request(svr)
.post("/member/loginc")
.send(data)
.expect(200)
.end(function(err, res) {
if (err) return done(err);
Expect('E002').to.equal(res.body.code);
done();
});
});
after(function() {
// server.close();
});
});
|
이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요. |
댓글 없음:
댓글 쓰기