2016-12-11 3 views
1

現在、sinonsinon-express-mockを使用してテストを作成しようとしています。誤ったリクエストを模擬し、アプリケーションで検証関数を呼び出し、検証関数が正しい応答ステータス(400)を返すようにします。しかし、現在、私はエラーTypeError: Cannot read property 'send' of undefinedを取得しています。私はsendが残りのresオブジェクトと一緒に嘲笑されると思っていましたが、どうすればこれを達成できますか?前もって感謝します。Type Error mocking expressレスポンスオブジェクト

機能私がテストしてい:

export const validateItemRequest = (req, res) => { 
    if (!req.query.number) { 
     return res.status(400).send('Number not specified'); 
    } else if (req.query.number % 1 !== 0) { 
     return res.status(400).send('Incorrect number syntax'); 
    } 
}; 

テストコード:

describe('item', function() { 

    it('should only accept valid requests', function() { 

     const itemRequest = { 
      query: { 
       number: 'abcde', 
      }, 
     }; 

     const req = mockReq(request); 
     const res = mockRes(); 

     itemController.validateItemRequest(req, res); 

    }); 
}); 
+0

req.query.number%1、modulusは0になりません。 – Bindrid

+0

数字が小数点以下の場合は@Bindrid – user3802348

+0

十分にうまい – Bindrid

答えて

0

sinon-express-mockは、現在、チェーンをサポートしていません。 an open issue to add chaining supportがありますが、メソッドは現在オブジェクトを返していないので、res.statusからsendにチェーンできません。

私は私のテストのための応答方法のいくつかを必要とするので、私はこのような私自身の応答のスパイ行わ:あなたはsendオフチェーンいけないので、私は唯一のstatusからの応答を返す

var response = { 
    status: sinon.spy(function() { return response; }), 
    send: sinon.spy(), 
    sendStatus: sinon.spy(), 
    reset: function() { 
    for (var method in this) { 
     if (method !== 'reset') { 
     this[method].reset(); 
     } 
    } 
    } 
}; 

お知らせおよびsendStatus

-1
response = { 
    json:(obj) => { response.body = obj }, 
    status:function(status) { 
    response.statusValue = status; 
    return this; 
}