2015년 7월 22일 수요일

Node.js + Mocha 테스트] 로그인 후(세션 생성) 파일 Upload 수행 테스트

Mocha 이용한 테스트로써 먼저 로그인을 수행해서 사용자 세션을 만든 후 파일 업로드를 수행하는 예제

1. testOfficeFile.js
- cookie를 이용하여 로그인시 생성되는 세션정보 설정
- 파일 업로드시 set('cookie', cookie)로 세션정보 set
- attach로 첨부파일 전송
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";
    var user_id = 'bbb';
    var password = 'bbb';
    var password_wrong = 'a';
    var mem_type = 'C';
    var cookie;

    before(function() {
        server.listen(4000);
    });

    describe("테스트 ->", function() {
        // 로그인 실행
        it('login', loginOffice());
        // 이미지 upload
        it ("이미지 파일 Upload", function(done) {
            var data = {
                user_id: user_id,
                password : password,
                user_name : '김치과',
                email : '',
                phone : '',
                cellphone : '',
                sex : '',
                logintype : mem_type
            };
            request(svr)
                .post("/office/info/upload-new-photo")
                .set('cookie', cookie)
                .field('Content-Type', 'multipart/form-data')
                .send(data)
                .attach('uploadnewphoto', '/Users/baesunghan/Downloads/testlogo.jpg')
                .expect(200)
                .end(function(err, res) {
                    if (err) return done(err);
                    console.log(res.body.code);
                    console.log(res.body.message);
                    expect('0000').to.equal(res.body.code);
                    done();
                });
        });
    });

    function loginOffice() {
        return function(done) {
            var data = {
                user_id: user_id,
                password : password,
                mem_type : mem_type
            };
            request(svr)
                .post("/member/login")
                .send(data)
                .expect(200)
                .end(function(err, res) {
                    if (err) return done(err);
                    res.body.code.should.be.equal('0000');
                    // 로그인 성공후 세션 정보를 cookie에 설정
                    cookie = res.headers['set-cookie'];
                    done();
                });
        }
    }
});


2. office.js Route 파일
- file upload를 실행 로직
var CONSTS = require('./consts');
var express = require('express');
var fs = require('fs');

router.post('/info/upload-new-photo', function(req, res, next) {
    console.log(req.body);
    console.log(req.files);
    var imageFile = req.files.uploadnewphoto;
    if (imageFile) {
        // 변수 선언
        var name = imageFile.name;
        var path = imageFile.path;
        var type = imageFile.mimetype;
        // 이미지 파일 확인
        if (type.indexOf('image') != -1) {
            // 이미지 파일의 경우 : 파일 이름을 변경합니다.
            var outputPath = CONSTS.UPLOADPATH + Date.now() + '_' + name;
            fs.rename(path, outputPath, function (err) {
                if (err) {
                    res.send(CONSTS.getErrData(err.code));
                    return;
                }
                res.send(CONSTS.getErrData('0000'));

            });
        } else {
            // 이미지 파일이 아닌 경우 : 파일 이름 제거
            fs.unlink(path, function(err) {
                res.send(CONSTS.getErrData('E004'));
            });
        }
    } else {
        res.send(CONSTS.getErrData('E003'));
    }
});

3. 실행
baesunghan:~/git/dentaljobs$mocha ./test/testOfficeFile

    테스트 -> 테스트 -> login: { user_id: 'bbb', password: 'bbb', mem_type: 'C' }
{ code: '0000', message: 'SUCCESS!!!' }
POST /member/login 200 44.848 ms - 38
  ․ 테스트 -> 테스트 -> login: 66ms
    테스트 -> 테스트 -> 이미지 파일 Upload: session이 있음.
start /office/info/upload-new-photo
{ 'Content-Type': 'multipart/form-data' }
{ uploadnewphoto:
   { fieldname: 'uploadnewphoto',
     originalname: 'testlogo.jpg',
     name: 'e3bb6d90e617db3717bba6174aaddaaa.jpg',
     encoding: '7bit',
     mimetype: 'image/jpeg',
     path: '/var/folders/0y/124f1qys05q4gvfgs1f4bg2h0000gn/T/e3bb6d90e617db3717bba6174aaddaaa.jpg',
     extension: 'jpg',
     size: 2208,
     truncated: false,
     buffer: null } }
POST /office/info/upload-new-photo
200 17.854 ms - 38
0000
SUCCESS!!!
  ․ 테스트 -> 테스트 -> 이미지 파일 Upload: 32ms

  2 passing (111ms)
baesunghan:~/git/dentaljobs$

이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.

댓글 없음:

댓글 쓰기