2016-03-30 9 views
1

Я получаюSupertest + Restify gzipResponse загрузки файла

TypeError: Cannot read property 'status' of undefined 

при попытке загрузить файл с помощью Supertest к простому restify сервера, с gzipResponse включен.

Версии и т.д.:

$ npm list | grep 'super\|mocha\|restify' 
├─┬ [email protected] 
├─┬ [email protected] 
└─┬ [email protected] 
    └─┬ [email protected] 

$ 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 отключен, и она будет также, если пройти не файл прилагается.

Я не уверен, связана ли эта проблема с суперагентом/суперсетевым, или проблема заключается в том, чтобы восстановить/gzip. Любая помощь приветствуется.

ответ

1

Я думаю, что это может быть проблема с конфигурацией сервера с вашим проектом. Я думаю, supertest и superagent обрабатывать ответы gzip просто отлично.

Вот фрагмент теста мокко, который я написал, который показывает, что он работает. Предоставлено это с помощью экспресс-сервера, но у него все еще есть сжатие 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(); 
     }); 
    }); 
}); 

Хотя я не использовал restify много я просто создал быстрый образец, который использует restify в качестве сервера и тесты с Supertest еще пройти. В приведенном выше примере вам нужно добавить вызов 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(); 
     }); 
    }); 
}); 
+0

Да, это странно, я знаю. Кажется, что это проблема с конкретным компилятором restify + compression + supertest. Загрузка файла с помощью curl отлично работает ... – Edo

+0

@ Просто я обновил ответ, чтобы показать пример, используя restify в качестве сервера API. Я использую те же отпечатки, включая узел 5.5. Вам нужен вызов server.listen? – Mikelax

+0

Выполнение ваших тестов не подходит для меня, потому что кажется, что вы забыли аргументы 'done', в своих' it' тестах. Я добавил аргумент done и выполнил ваши тесты с помощью вызова 'server.listen', но у меня все еще есть ошибка загрузки. Очень странно. – Edo

 Смежные вопросы

  • Нет связанных вопросов^_^