Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 158c45c

Browse files
committed
test: much faster tests
1 parent daac39c commit 158c45c

File tree

9 files changed

+530
-664
lines changed

9 files changed

+530
-664
lines changed

package.json

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,11 @@
2626
"xtend": "^4.0.0"
2727
},
2828
"devDependencies": {
29-
"chai": "^1.9.1",
30-
"co": "^3.0.6",
31-
"express": "*",
29+
"form-data": "^0.2.0",
30+
"fs-temp": "^0.1.2",
3231
"mocha": "*",
3332
"rimraf": "^2.2.8",
34-
"standard": "^3.7.2",
35-
"supertest": "^0.13.0"
33+
"standard": "^3.7.2"
3634
},
3735
"engines": {
3836
"node": ">= 0.10.0"
@@ -42,9 +40,6 @@
4240
"index.js"
4341
],
4442
"scripts": {
45-
"test": "standard && mocha --reporter spec --bail --check-leaks"
46-
},
47-
"standard": {
48-
"ignore": [ "test/" ]
43+
"test": "standard && mocha"
4944
}
5045
}

test/_util.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var fs = require('fs')
2+
var path = require('path')
3+
var stream = require('stream')
4+
5+
exports.file = function file (name) {
6+
return fs.createReadStream(path.join(__dirname, 'files', name))
7+
}
8+
9+
exports.fileSize = function fileSize (path) {
10+
return fs.statSync(path).size
11+
}
12+
13+
exports.submitForm = function submitForm (multer, form, cb) {
14+
form.getLength(function (err, length) {
15+
if (err) return cb(err)
16+
17+
var req = new stream.PassThrough()
18+
19+
form.pipe(req)
20+
req.headers = {
21+
'content-type': 'multipart/form-data; boundary=' + form.getBoundary(),
22+
'content-length': length
23+
}
24+
25+
multer(req, null, function (err) {
26+
cb(err, err ? undefined : req)
27+
})
28+
})
29+
}

test/disk-storage.js

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
/* eslint-env mocha */
2+
3+
var assert = require('assert')
4+
5+
var util = require('./_util')
6+
var multer = require('../')
7+
var temp = require('fs-temp')
8+
var rimraf = require('rimraf')
9+
var FormData = require('form-data')
10+
11+
describe('Disk Storage', function () {
12+
var uploadDir, parser
13+
14+
before(function (done) {
15+
temp.mkdir(function (err, path) {
16+
if (err) return done(err)
17+
18+
uploadDir = path
19+
parser = multer({ dest: path })
20+
done()
21+
})
22+
})
23+
24+
after(function (done) {
25+
rimraf(uploadDir, done)
26+
})
27+
28+
it('should process parser/form-data POST request', function (done) {
29+
var form = new FormData()
30+
31+
form.append('name', 'Multer')
32+
form.append('small0', util.file('small0.dat'))
33+
34+
util.submitForm(parser, form, function (err, req) {
35+
assert.ifError(err)
36+
37+
assert.equal(req.body.name, 'Multer')
38+
39+
assert.deepEqual(Object.keys(req.files), [ 'small0' ])
40+
assert.equal(req.files.small0.length, 1)
41+
assert.equal(req.files.small0[0].fieldname, 'small0')
42+
assert.equal(req.files.small0[0].originalname, 'small0.dat')
43+
assert.equal(req.files.small0[0].size, 1778)
44+
assert.equal(util.fileSize(req.files.small0[0].path), 1778)
45+
46+
done()
47+
})
48+
49+
})
50+
51+
it('should process empty fields and an empty file', function (done) {
52+
var form = new FormData()
53+
54+
form.append('empty', util.file('empty.dat'))
55+
form.append('name', 'Multer')
56+
form.append('version', '')
57+
form.append('year', '')
58+
form.append('checkboxfull', 'cb1')
59+
form.append('checkboxfull', 'cb2')
60+
form.append('checkboxhalfempty', 'cb1')
61+
form.append('checkboxhalfempty', '')
62+
form.append('checkboxempty', '')
63+
form.append('checkboxempty', '')
64+
65+
util.submitForm(parser, form, function (err, req) {
66+
assert.ifError(err)
67+
68+
assert.equal(req.body.name, 'Multer')
69+
assert.equal(req.body.version, '')
70+
assert.equal(req.body.year, '')
71+
72+
assert.deepEqual(req.body.checkboxfull, [ 'cb1', 'cb2' ])
73+
assert.deepEqual(req.body.checkboxhalfempty, [ 'cb1', '' ])
74+
assert.deepEqual(req.body.checkboxempty, [ '', '' ])
75+
76+
assert.deepEqual(Object.keys(req.files), [ 'empty' ])
77+
assert.equal(req.files.empty.length, 1)
78+
assert.equal(req.files.empty[0].fieldname, 'empty')
79+
assert.equal(req.files.empty[0].originalname, 'empty.dat')
80+
assert.equal(req.files.empty[0].size, 0)
81+
assert.equal(util.fileSize(req.files.empty[0].path), 0)
82+
83+
done()
84+
})
85+
86+
})
87+
88+
it('should process multiple files', function (done) {
89+
var form = new FormData()
90+
91+
form.append('empty', util.file('empty.dat'))
92+
form.append('tiny0', util.file('tiny0.dat'))
93+
form.append('tiny1', util.file('tiny1.dat'))
94+
form.append('small0', util.file('small0.dat'))
95+
form.append('small1', util.file('small1.dat'))
96+
form.append('medium', util.file('medium.dat'))
97+
form.append('large', util.file('large.jpg'))
98+
99+
util.submitForm(parser, form, function (err, req) {
100+
assert.ifError(err)
101+
102+
assert.deepEqual(req.body, {})
103+
104+
assert.equal(Object.keys(req.files).length, 7)
105+
106+
assert.equal(req.files.empty.length, 1)
107+
assert.equal(req.files.empty[0].fieldname, 'empty')
108+
assert.equal(req.files.empty[0].originalname, 'empty.dat')
109+
assert.equal(req.files.empty[0].size, 0)
110+
assert.equal(util.fileSize(req.files.empty[0].path), 0)
111+
112+
assert.equal(req.files.tiny0.length, 1)
113+
assert.equal(req.files.tiny0[0].fieldname, 'tiny0')
114+
assert.equal(req.files.tiny0[0].originalname, 'tiny0.dat')
115+
assert.equal(req.files.tiny0[0].size, 122)
116+
assert.equal(util.fileSize(req.files.tiny0[0].path), 122)
117+
118+
assert.equal(req.files.tiny1.length, 1)
119+
assert.equal(req.files.tiny1[0].fieldname, 'tiny1')
120+
assert.equal(req.files.tiny1[0].originalname, 'tiny1.dat')
121+
assert.equal(req.files.tiny1[0].size, 7)
122+
assert.equal(util.fileSize(req.files.tiny1[0].path), 7)
123+
124+
assert.equal(req.files.small0.length, 1)
125+
assert.equal(req.files.small0[0].fieldname, 'small0')
126+
assert.equal(req.files.small0[0].originalname, 'small0.dat')
127+
assert.equal(req.files.small0[0].size, 1778)
128+
assert.equal(util.fileSize(req.files.small0[0].path), 1778)
129+
130+
assert.equal(req.files.small1.length, 1)
131+
assert.equal(req.files.small1[0].fieldname, 'small1')
132+
assert.equal(req.files.small1[0].originalname, 'small1.dat')
133+
assert.equal(req.files.small1[0].size, 315)
134+
assert.equal(util.fileSize(req.files.small1[0].path), 315)
135+
136+
assert.equal(req.files.medium.length, 1)
137+
assert.equal(req.files.medium[0].fieldname, 'medium')
138+
assert.equal(req.files.medium[0].originalname, 'medium.dat')
139+
assert.equal(req.files.medium[0].size, 13196)
140+
assert.equal(util.fileSize(req.files.medium[0].path), 13196)
141+
142+
assert.equal(req.files.large.length, 1)
143+
assert.equal(req.files.large[0].fieldname, 'large')
144+
assert.equal(req.files.large[0].originalname, 'large.jpg')
145+
assert.equal(req.files.large[0].size, 2413677)
146+
assert.equal(util.fileSize(req.files.large[0].path), 2413677)
147+
148+
done()
149+
})
150+
151+
})
152+
153+
})

test/fields.js

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/* eslint-env mocha */
2+
3+
var assert = require('assert')
4+
var stream = require('stream')
5+
6+
var util = require('./_util')
7+
var multer = require('../')
8+
var FormData = require('form-data')
9+
10+
describe('Fields', function () {
11+
var parser
12+
13+
before(function () {
14+
parser = multer({ storage: multer.memoryStorage() })
15+
})
16+
17+
it('should process multiple fields', function (done) {
18+
var form = new FormData()
19+
20+
form.append('name', 'Multer')
21+
form.append('key', 'value')
22+
form.append('abc', 'xyz')
23+
24+
util.submitForm(parser, form, function (err, req) {
25+
assert.ifError(err)
26+
assert.deepEqual(req.body, {
27+
name: 'Multer',
28+
key: 'value',
29+
abc: 'xyz'
30+
})
31+
done()
32+
})
33+
})
34+
35+
it('should process empty fields', function (done) {
36+
var form = new FormData()
37+
38+
form.append('name', 'Multer')
39+
form.append('key', '')
40+
form.append('abc', '')
41+
form.append('checkboxfull', 'cb1')
42+
form.append('checkboxfull', 'cb2')
43+
form.append('checkboxhalfempty', 'cb1')
44+
form.append('checkboxhalfempty', '')
45+
form.append('checkboxempty', '')
46+
form.append('checkboxempty', '')
47+
48+
util.submitForm(parser, form, function (err, req) {
49+
assert.ifError(err)
50+
assert.deepEqual(req.body, {
51+
name: 'Multer',
52+
key: '',
53+
abc: '',
54+
checkboxfull: [ 'cb1', 'cb2' ],
55+
checkboxhalfempty: [ 'cb1', '' ],
56+
checkboxempty: [ '', '' ]
57+
})
58+
done()
59+
})
60+
})
61+
62+
it('should not process non-multipart POST request', function (done) {
63+
var req = new stream.PassThrough()
64+
65+
req.end('name=Multer')
66+
req.method = 'POST'
67+
req.headers = {
68+
'content-type': 'application/x-www-form-urlencoded',
69+
'content-length': 11
70+
}
71+
72+
parser(req, null, function (err) {
73+
assert.ifError(err)
74+
assert.equal(req.hasOwnProperty('body'), false)
75+
assert.equal(req.hasOwnProperty('files'), false)
76+
done()
77+
})
78+
})
79+
80+
it('should not process non-multipart GET request', function (done) {
81+
var req = new stream.PassThrough()
82+
83+
req.end('name=Multer')
84+
req.method = 'GET'
85+
req.headers = {
86+
'content-type': 'application/x-www-form-urlencoded',
87+
'content-length': 11
88+
}
89+
90+
parser(req, null, function (err) {
91+
assert.ifError(err)
92+
assert.equal(req.hasOwnProperty('body'), false)
93+
assert.equal(req.hasOwnProperty('files'), false)
94+
done()
95+
})
96+
})
97+
98+
})

0 commit comments

Comments
 (0)