2016-12-23 10 views
0

私は、残りのAPIをテストするために 'chai-http'を使用し、httpリクエストを模擬するために 'mock-http-server'を使用しています。私は、次の手順を実行して、モックGETリクエストを実装することができています -nodejsのmock-http-server npmモジュールを使用してPOST要求をモックする方法は?

it ('API GET TEST', function (done) { 
 

 
     mockserver.on({ 
 
      method: 'GET', 
 
      path: '/v1/myAPI', 
 
      reply: { 
 
        status: 200, 
 
        headers: {"content-type": "application/json"}, 
 
        body: JSON.stringify(response) 
 
        } 
 
      }); 
 

 
      chai.request(myapp) 
 
      .get('/v1/myAPI') 
 
      .end(function(err, res) { 
 
       res.should.have.status(200); 
 
       res.should.be.json; 
 
       done(); 
 
      }) 
 
    });

マイチャイ要求が正しく、私はmockserver GET/V1/myAPIから送ってきた応答を取得します。

私がしたいことは投稿要求を模倣し、投稿体に応じて回答を送信したいと思います。

{ 
 
    id : 1 
 
}

しかし、私はポストのためのモックAPIを使用する場合、私の 'REQ' オブジェクトは、ポスト体が含まれていません -

 mockserver.on({ 
 
      method : 'POST', 
 
      path : '/v1/myPOSTAPI', 
 
      reply: { 
 
       status: 200, 
 
       headers: { "content-type": "application/json" }, 
 
       body: function(req) { 
 

 
        if (req.body.id == 1) { 
 
         JSON.stringify(response1); 
 
        } else { 
 
         JSON.stringify({"error" : "Not Found"}); 
 
        } 
 
       } 
 
      } 
 

 

 
     });

マイPOST本体があります。ポストリクエストを 'mock-http-server'を使って投稿リクエストを嘲笑することで投稿を得る方法はありますか?

+1

通常、 'req'は' Express'に 'body'フィールドを含みません。 'body-parser'(またはそれに類するもの)は、postデータを解析し、それを' req.body'に入れます。しかし、 'mock-http-server''の場合、彼らは身体を解析していません。したがって、 'req.body'は空です。 –

+1

代わりに 'nock'を試してください。 –

答えて

0

https://github.com/spreaker/node-mock-http-server

server.on({ 
method: 'POST', 
path: ''/v1/myPOSTAPI'', 
filter: function (req) { 
    return _.isEqual(req.body, {id : 1}) // use some function to equal req data 
}, 
reply: { 
    status: 201, 
    headers: { "content-type": "application/json" }, 
    body: function(req) { 

       if (req.body.id == 1) { 
        JSON.stringify(response1); 
       } else { 
        JSON.stringify({"error" : "Not Found"}); 
       } 
      } 
} 

})。