angular-mocks をスタブとして使ってフロントエンドを開発していて、 ずっと
angular.module("sampleApp").run(["$httpBackend", function($httpBackend) { $httpBackend.whenGET("/users").respond([ { id: 1, name: "香川" }, { id: 2, name: "本田" }, { id: 3, name: "長友" } ]); }]);
という感じで決まったデータを返していた。
だけど、ソースコードを読んでいたら
angular.module("sampleApp").run(["$httpBackend", function($httpBackend) { var users = [ { id: 1, name: "香川" }, { id: 2, name: "本田" }, { id: 3, name: "長友" } ]; $httpBackend.whenGET("/users").respond(function() { return [200, users, {}]; }); }]);
という風にして、動的に返すデータを変更できることに、今さら気付いた。 関数が返す配列にデータだけでなく、ステータスコードやヘッダーを含めるのがポイント。
以前試しに respond に function を渡したことがあって、そのときはデータだけ返していたから上手くいかなかったのか。 諦めずにソースコードまで追っていれば、もっと早く気付けたと思うと悔しい。