2016-03-30 26 views
1

Ben Supertest + Restify gzipResponse dosya yükleme

TypeError: Cannot read property 'status' of undefined 

alıyorum.

sürümleri vb:

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

$ node -v 
v5.5.0 

sunucusu:

const restify = require('restify'); 
const server = restify.createServer(); 

server.use(restify.gzipResponse()); 

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

module.exports = server; 

testi: gzipResponse devre dışı bırakıldığında

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); 
    }); 

}); 

testi geçecek ve aynı zamanda eğer geçecek hayır dosya eklenmiştir.

Bu sorunun süperantif/en üst düzeyde ilişkili olup olmadığından veya sorunun restify/gzip ile ilgili olup olmadığından emin değilim. Herhangi bir yardım takdir edilir.

cevap

1

Bu, projenizle ilgili bir sunucu yapılandırma sorunu olabileceğini düşünüyorum. Bence supertest ve superagent, gzip yanıtlarını ele alıyor.

İşte çalıştığını gösteren bir mocha sınama snippet'i yazdım. Bu bir ekspres sunucu kullanıyor, ancak hala gzip sıkıştırma etkinleştirilmiş. Ben kullanmadıysanız rağmen

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 çok ben sadece sunucu olarak restify kullanır ve Supertest ile testler hala geçmesi hızlı bir örneği oluşturdu. Yukarıdaki örnekte bir server.listen çağrısı eklemeniz gerekiyor mu?

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

Evet, garip, biliyorum. Bu özel restify + compression + supertest combo ile gerçekten bir sorun gibi görünüyor. Curl kullanarak bir dosya yüklemek mükemmel çalışıyor ... – Edo

+0

@Edo API sunucusunu yeniden tanımlamayı kullanarak bir örnek göstermek için cevabı yeni güncelledim. Düğüm 5.5 de dahil olmak üzere aynı deps kullanıyorum. Bir server.listen aramasına mı ihtiyacınız var? – Mikelax

+0

Testlerinizi yürütmek benim için başarısız oluyor, çünkü 'bitti' argümanlarını, 'sizin' testlerinde unutmuşsunuz gibi görünüyor. Yapılan argümanı ekledim ve testlerinizi 'server.listen' çağrısı ile çalıştırdım, ancak hala yükleme testi başarısız oluyor. Çok ilginç. – Edo