【Node.js】nock レスポンスの順番設定

JavaScript

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

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

いくつかテストを作っていく中に
同一処理ブロックの中で同じAPIを叩く事があったのですが、
初回と2回目ではレスポンスの形が若干変わるのです。。。

これを普通にnockでやろうとするとうまくいかないんですね。。

スポンサーリンク

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 - GitHub - nock/nock: HTTP server mocking and expectations library for Node.js