0
私は自分のプロジェクトにnode-rest-clientを使用しています。私はnode-rest-clientを利用するクラスの単体テストを開始したいところまで来ました。どのように私はできるかについての例があります模擬私のテストでクライアント?私はユニットテストでSinonを使用しています。ノード・レスト・クライアント要求をどのようにモックできますか?
私は自分のプロジェクトにnode-rest-clientを使用しています。私はnode-rest-clientを利用するクラスの単体テストを開始したいところまで来ました。どのように私はできるかについての例があります模擬私のテストでクライアント?私はユニットテストでSinonを使用しています。ノード・レスト・クライアント要求をどのようにモックできますか?
手順1:テストするjsコードで、node-rest-clientインスタンスをエクスポートして、テストコードで使用できるようにします。
var Client = require('node-rest-client').Client;
var restClient = new Client();
exports.restClient = restClient; //instance now available outside this module
restClient.get(someUrl, ...); //actual node rest client call
ステップ2:myApp.jsの例では、私はこれを入れてテストコードでは、偽の機能を返すラッパー関数を作成し、ターゲット・コードにそれを模擬するためにsinonを使用しています。これにより、テストセットアップ中に戻りデータと応答コードを注入することができます。
var nodeRestGet = function (data, statusCode) {
return function (url, cb) {
cb(data, { statusCode: statusCode || 200 });
}
};
sinon.stub(myApp.restClient, 'get').callsFake(nodeRestGet("", 200));
ステップ3:テストコードを書いてください。
myApp.doThings(); // TEST
myApp.restClient.get.restore(); // removes the mock
ありがとう@JohnW、私は取得しています** cb **は関数エラーではありません、あなたは私を助けてくださいこれに。 – Praveen
@Praveenあなたのコードを見ることなく、あなたがテストしているターゲットコードが問題のように聞こえます。上記の楕円をrestClient.get(someUrl、...)に配置する場合は、2番目のパラメータとしてコールバック関数を指定する必要があります。コードを共有すると、より明確な答えを得ることができます。 – JohnW
以下の変更でうまく動作します。 'var nodeRestGet = function(data、statusCode){ return function(url、opts、next){ next(データ、{statusCode:statusCode || 200}); return { on:()=> { } }; }; }; ' – Praveen