を使用する AngularJS サービスを単体テストしようとしています$resource
。$resource
それを分離しておくために、Jasmine の spyOn と spyのメソッドを使用したいと思いquery()
ます。query()
私のコントローラーでは、を呼び出さずに、成功関数とエラー関数をクエリ メソッドに直接渡す短い形式を使用できるようにしたいと考えています$promise.then(success, error)
。これは可能ですか、それとも長い形式で立ち往生していquery().$promise.then(success, error)
ますか?
これは、私の問題を説明する失敗したテストで作成したプランカーです: http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview
問題を解決すると主張する SO に関するいくつかの質問を見つけましたが、すべて私が使用しているコンポーネントのはるかに古いバージョンを使用しています。plunker から、Angular 1.5.2 と Jasmine 2.4.1 で作業していることがわかります。
関連する質問として、多くのチュートリアルでは、コントローラーで戻り値をquery()
配列に割り当てることができ、データが読み込まれると配列が更新されることが示されています。これは最もクリーンなソリューションですが、エラーが発生した場合はどうなるでしょうか? データの読み込みに問題がある場合は、デフォルトのエラー通知が表示されるか、何も起こらないと思います。インターセプターを介して他の場所でエラーを処理し、イベントを発生させて、一般的な非コントローラー固有の方法でユーザーに通知することをお勧めしますか? その場合、インターセプターは、「一部のリクエストが 500 を返した」ではなく、「ベーグルの読み込みに通常より時間がかかっているようです。ここをクリックして再試行してください」など、コンテキストを提供するためにユーザーに表示するメッセージを決定する何らかの方法が必要になると思います。ステータスコード」