2016-03-30 13 views
1

をアップロードします。Supertest + Restify gzipResponseファイル<code>gzipResponse</code>をオンにして、簡単なrestifyサーバーにsupertestを使用してファイルをアップロードしようとしたとき、私は</p> <pre><code>TypeError: Cannot read property 'status' of undefined </code></pre> <p>を取得しています

バージョンなど:

$ 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が無効になっているとき、テストに合格し、ノーならば、それも通過しますファイルが添付されています。

この問題がsuperagent/supertest関連であるのか、問題がrestify/gzipにあるのか不明です。どんな助けもありがとうございます。

答えて

1

これはあなたのプロジェクトでサーバーの設定に問題があると思います。私はsupertestsuperagentは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

@Edo APIサーバーとしてrestifyを使用した例を示すために答えを更新しました。私はノード5.5を含む同じdepsを使用しています。 server.listenコールが必要ですか? – Mikelax

+0

あなたのテストを走らせることは、あなたの 'it'テストで' done'引数を忘れてしまったように思えます。 done引数を追加し、 'server.listen'コールでテストを実行しましたが、アップロードテストに失敗しました。非常に奇妙な。 – Edo

関連する問題

 関連する問題