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를 다운로드하세요. | 
 
댓글 없음:
댓글 쓰기