2017-07-12 10 views
2

Node.jsのサーバーレスポンスをmocha chai-httpでテストしています。 私が受け取る応答は常にnullです。ただし、モカテストランナーなしで定期的にリクエストを実行すると、すべてが正常です。私は私が間違って要求を顕著に考えるMocha chai-httpレスポンスは常にnullを返します

var module = require('./testedServer'); 
var assert = require('assert'); 

var chai = require('chai') 
    , chaiHttp = require('chai-http'); 

chai.use(chaiHttp); 

describe('Check receiving data from server:', function() { 

       beforeEach(function() { 

         module.server.listen(9099); 

       }); 

       it('Should receive a non-null object containing the chat logs', function(done) { 

         chai.request('http://localhost:9099') 
           .post('/') 
           .send(
           'poll0,0/Annonymous.' 
         ).end(function(res){ 
             console.log(res); 
             assert.equal(res != null,true,"Error: test has failed - server response is null"); 
             done(); 
         }); 

       }); 

       afterEach(function() { 

         // runs after each test in this block 

         module.server.close(); 

       }); 

     }); 

これはサーバコードです:

var Babble = { messages: new Array() , users: new Array(),userCount:0 }; // 

var http = require('http'); 
var urlUtil = require('url'); 
var queryUtil = require('querystring'); 

var Babble = { messages: new Array() , users: new Array(),userCount:0 }; // Data object to save all chat logs 
var server = http.createServer(function(request, response) { 
    var strData,name,index; 
    response.setHeader('Access-Control-Allow-Origin', '*'); 
    if (request.method === 'GET') { 
     var url = urlUtil.parse(request.url); 
     var data = queryUtil.parse(url.query); 
     console.log(data.message); 
     if (!data.message) { 
      response.writeHead(400); 
     } 
     response.end(); 
    } else if (request.method === 'POST') { 
     var requestBody = ''; 
     request.on('data', function(chunk) { 
       requestBody += chunk.toString(); 
     }); 
     request.on('end', function() { 
      var data = queryUtil.parse(requestBody); 
      strData = JSON.stringify(data); 
      // Handle different requests 

       ... 

      response.end(JSON.stringify(Babble)); 

      } 
     }); 
}); 

    module.exports = {server,Babble}; 

そして、これはモカチャイ-HTTPテストコードです。

+0

私は人が "テキストの壁"によってオフにされている可能性があり、したがって4時間の応答時間だと思います。しかし、この場合、最小限の例は少し長かったです。完全な例がなければ問題を発見していないでしょう。 – rmharrison

答えて

1

chai.endは、最初のコールバックスタイルerrを使用します。 chai-httpドキュメントのthisの例を参照してください。

まず、errを含むテストコードで、問題を解決する必要があります。

  • ERR:例えばまともな最小限のテストを書くの面で

    ).end(function(err, res){ // err first callback 
    

    は、おそらくのために少なくとも一つのアサーション(またはit)をお勧めしますassert.equal

  • res:resオブジェクトのいくつかの属性。 res.statusCode

先に進むと、最初のコールバックでエラーが発生します。簡単な説明については、hereを開始してください。

+0

この回答は非常に役に立ちました。問題が解決しました。どうもありがとう!!! – Shaked

関連する問題