Supertest +确定gzipResponsefile upload

我越来越

TypeError: Cannot read property 'status' of undefined 

当试图上传一个文件使用supertest到一个简单的restify服务器,打开gzipResponse

版本等:

 $ npm list | grep 'super\|mocha\|restify' ├─┬ mocha@2.4.5 ├─┬ restify@4.0.4 └─┬ supertest@1.2.0 └─┬ superagent@1.8.3 $ node -v v5.5.0 

服务器:

 const restify = require('restify'); const server = restify.createServer(); server.use(restify.gzipResponse()); server.put('image', (req, res) => { res.send(200); }); module.exports = server; 

考试:

 const request = require('supertest'); const server = require('./index'); const path = require('path'); describe('insertImage', function () { it('should send an image', done => { request(server) .put('/image') .attach('image', path.join(__dirname, 'pc.png')) .expect(200, done); }); }); 

gzipResponse被禁用时,testing会通过,如果没有附加文件,testing也会通过。

我不确定这个问题是否是superagent / supertest相关的,还是问题在于restify / gzip。 任何帮助表示赞赏。

我认为这可能是您的项目的服务器configuration问题。 我认为supertest和superagent处理gzip响应就好了。

这是我写的一个摩卡testing片段,显示它正在工作。 当然,这是使用快速服务器,但它仍然启用了gzip压缩。

 var express = require('express'); var supertest = require('supertest'); var compression = require('compression'); var path = require('path'); var app = express(); app.use(compression()); app.get('/test', function(req, res) { res.sendStatus(200); }); app.put('/image', function(req, res) { res.sendStatus(200); }); describe('Test gzip with file upload', function(){ it('Get a test page', function(done) { supertest(app) .get('/test') .expect(200) .end(function(err, res){ if (err) return done(err); done(); }); }); it('Upload an image', function(done) { supertest(app) .put('/image') .attach('image', path.join(__dirname, 'pc.png')) .expect(200) .end(function(err, res){ if (err) return done(err); done(); }); }); }); 

虽然我还没有用过很多,但我创build了一个使用restify作为服务器的快速示例,超级testing仍然通过。 在上面的例子中,你是否需要添加一个server.listen调用?

 var supertest = require('supertest'); var restify = require('restify'); var path = require('path'); var server = restify.createServer(); server.use(restify.gzipResponse()); server.get('/test', function(req, res) { res.send(200); }); server.put('/image', function(req, res) { res.send(200); }); server.listen(3000, function() { console.log('%s listening at %s', server.name, server.url); }); describe('Test gzip with file upload', function(){ it('Get a test page', function(done) { supertest(server) .get('/test') .expect(200) .end(function(err, res){ if (err) return done(err); done(); }); }); it('Upload an image', function(done) { supertest(server) .put('/image') .attach('image', path.join(__dirname, 'neo.jpg')) .expect(200) .end(function(err, res){ if (err) return done(err); done(); }); }); }); 
Interesting Posts