首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Supertest + Restify gzipResponse文件上传

Supertest + Restify gzipResponse文件上传
EN

Stack Overflow用户
提问于 2016-03-30 18:45:04
回答 1查看 1.4K关注 0票数 1

我得到了

代码语言:javascript
复制
TypeError: Cannot read property 'status' of undefined

在打开gzipResponse的情况下,尝试使用supertest将文件上传到简单的restify服务器时。

版本等:

代码语言:javascript
复制
$ 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

服务器:

代码语言:javascript
复制
const restify = require('restify');
const server = restify.createServer();

server.use(restify.gzipResponse());

server.put('image', (req, res) => {
    res.send(200);
});

module.exports = server;

测试:

代码语言:javascript
复制
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时,测试将通过,如果未附加任何文件,测试也将通过。

我不确定这个问题是否与superagent/supertest相关,或者问题是否出在restify/gzip上。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-04-14 06:32:48

我认为这可能是您的项目的服务器配置问题。我认为supertestsuperagent可以很好地处理gzip响应。

这是我写的一个mocha测试片段,它展示了它的工作方式。当然,这是在使用express服务器,但它仍然启用了gzip压缩。

代码语言:javascript
复制
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();
        });
  });
});

尽管我没怎么用过restify,但我只是创建了一个使用restify作为服务器的快速示例,并且使用supertest的测试仍然通过。在上面的示例中,是否需要添加server.listen调用?

代码语言:javascript
复制
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();
      });
  });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36306505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档