Sinon.JSのFakeServerでXHRをフェイクするけど、特定のXHRだけは実際にリクエストさせるときのメモ。
最初にFakeServerを作る。
var server = sinon.fakeServer.create();
この時点でXMLHttpRequestがSinonのものに置き換わっているようなので、戻したいときはserver.restore()
で。
autoRespondをtrueにして、FakeServerにリクエストを投げたときにわざわざserver.respond()
しなくていいようにする。
server.autoRespond = true;
ここが一番大事なところ、フィルタの指定。
server.xhr.useFilters = true;
server.xhr.addFilter(function(method, url, async, username, password) {
if (url.indexOf('/path/to/api') !== -1) {
// フェイクしない
return true;
}
// フェイクする
return false;
});
server.xhr.useFilters = true
でフィルタを使用する指定をする。
server.xhr.addFilter
にフィルタ用の関数を渡す。
addFilter()
はリクエストするたびに呼ばれる。渡す関数は戻り値としてtrue
を返すとFakeServerで処理せずに実際にリクエストを投げ、false
を返すとFakeServerで処理されるようになる。
上記のコードの場合、リクエスト先のURLに/path/to/api
が含まれていれば実際にリクエストを投げた上でそのレスポンスが返るが、それ以外の場合はFakeServerに処理される。
JSONファイルは実際にリクエストして取得して、APIはFakeServerのレスポンスを受け取りたい、という謎の使い方をしたくて調べたら簡単にできた。Sinonすごい。