angular-mocks でモックが返すデータを動的に決める

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 を渡したことがあって、そのときはデータだけ返していたから上手くいかなかったのか。 諦めずにソースコードまで追っていれば、もっと早く気付けたと思うと悔しい。