[Node.js]nockでレスポンスを変化させる

JavaScript

最近仕事でnode.jsを触り始めて
少しずつ慣れてきました

node.jsで単体テストを行う際に接続先が未完成だったりすることがあるので
nockというライブラリを使ってresponseをmockしています

nockで返すレスポンスを可変にしたい

いくつかテストを作っていく中で
同一処理で同じAPIを叩く事があったのですが、
初回と2回目ではレスポンスの形が変わる仕様がありました。

nock chainを使って解決

ズバリ、チェインという形で解決できました。
これでnockの順番・レスポンス内容を設定できます。

nock(request_host_url)
    .get(target_path_A).reply(200, {status:'ok', data: {product: 'apple'}});
nock(request_host_url)
    .post(target_path_B).reply(200, {status:'ok'});
nock(request_host_url)
    .get(target_path_A).reply(200, {status:'ok', data: {product: 'apple', price: '120'}});

というのを組みたいとすると。。。

nock(request_host_url)
    .get(target_path_A).reply(200, {status:'ok', data: {product: 'apple'}})
    .post(target_path_B).reply(200, {status:'ok'});
    .get(target_path_A).reply(200, {status:'ok', data: {product: 'apple', price: '120'}});

と書けるのです!
同一ホストであれば、上記のようにnock(request_host_url)は1回の記述で済みます

別ホストであれば、ホスト単位に実行したい順番を並べれば対応できます!

ググってもなかなか出てこなかったので
お役に立てればと思います!:)

公式Document はGitHubから!

GitHub - nock/nock: HTTP server mocking and expectations library for Node.js
HTTP server mocking and expectations library for Node.js - nock/nock