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