問題タブ [angular-mock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - モジュール全体をAngularJSで動的に注入する方法は?
よし、API に対するローカル開発用のモック サーバーとして使用する $httpBackend をセットアップしようとしています。search と searchMock の 2 つのサービスが別々のモジュールに含まれています。
- search は、ステージング環境または本番環境で API 動詞を公開する $resource オブジェクトを返し、期待どおりに動作します
- searchMock は $httpBackend を公開し、これは今度はモック JSON オブジェクトで応答し、それ自体で期待どおりに動作します
別のサービス APIInjector があります。これは、アプリのビルド時に Grunt によって動的に含まれる構成ファイルに基づいて現在の環境が何であるかを判断し、それに応じて search または searchMock を挿入します。
私の問題は、高低の検索からわかる限り、モジュールの run メソッド内で $httpBackend をセットアップする必要があることです。これの問題は、APIInjector の条件付きロジック内に run メソッドを挿入できないことです。
開発環境の条件が満たされている場合に $httpBackend を公開し、それ以外の場合は $resource サービスを公開するにはどうすればよいですか? 呼び出し元のコントローラーや searchService のコードは含めていませんが、必要に応じて説明のために含めることができます。
検索モック:
API インジェクター:
angularjs - Angular と Jasmine + $resource を使用して動作/機能/エンドポイント テストを作成する方法は?
サーバーのエンドポイントの機能テストを書きたいです。私はe2eテストを行っていません。これは、より機能的/行動的なテストです。
ただし、ジャスミンは次のエラーを生成します。
でモックしたくありませんhttpBackend.whenGET()
。エンドポイントの望ましくない動作を実際にテストしたいです (別名、バックエンド チームを非難します)。応答を模擬する単体テストは、別の仕様ファイルです。
ジャスミンでこれを行う方法はありますか?分度器やモカも追加する必要はありません。
javascript - Angular リソース プロミス キャッチ、ジャスミン toThrow()
角度コントローラーにいくつかのコードがあります:
user は、 get メソッドが呼び出されたときに promise を返す角度のある $resource です。
次のようにジャスミンでエラーがスローされるかどうかをテストしようとしています:
しかし、このエラーがスローされます:
例外をスローする関数が必要です。
期待どおりに機能する約束の受け入れをテストしましたが、対処できない非同期の側面があると想定しています。
また、passing in を呼び出して done() を呼び出してみましたが、どちらも機能しませんでした。
編集:
私はバックエンドを次のように嘲笑しています:
私の他のテストは機能することに注意してください。サーバーが 200 とユーザーを返し、すべてが機能する他のシナリオを試しました。サーバーエラーを受け取ったときに $scope.login() がエラーをスローするかどうかを具体的にテストしています。
angularjs - angular $http 呼び出しをモックし、$http のように動作する promise オブジェクトを返す方法
への呼び出しを模倣するために HttpPromise (または同様のもの) を返す方法はあり$http
ますか? 本物の HTTP リクエストが行われたかどうか、または偽の HttpPromise オブジェクトが偽のデータで返されたかどうかを示すグローバル変数を設定したいと考えています。
たとえば、次のようなサービスがあります。
そして、私のコントローラーには、次のような前述のサービスへの呼び出しがあります。
コントローラーのコードを変更しないようにしています。「 isInTestMode 」の場合でもチェーンが機能するようにしますsuccess
。error
サービスで説明した方法で偽造することはできHttpPromise
ますか?
以下は、上記の「MyService」(スニペット) の改訂版で、promise オブジェクトにsuccess
andが含まれています。error
しかし、どうすればsuccess
メソッドを実行できますか?
javascript - リクエストを無視する角度モック
Angular (v1.2.15)のサービスを使用しようとしています$httpBackend
が、要求が無視されます。ご覧のとおり、 html ドキュメント用とREST リクエスト用の 2 種類のリクエストを計画しました。ただし、リクエストを実行しても何も起こりません。私はまだ約束を受け取りますが、解決されることはありません。リクエストを変更して予期しないものを書くと、失敗します。
編集:
では、エラーをデバッグするために実行した手順を示します。
- 正規表現が正しく評価されたことを確認する
passThrough
代わりに、関数を使用しました。respond
そして、はい、それは実際の要求を行い、明らかに応答は見つかりませんでした. - その後、コメントですでに説明されているようにリクエストのフラッシュを確認しましたが、Angular からリクエストがなかったというメッセージも受け取りました。
console.log()
どちらも何も出力しません。アラート、ブレークポイントなどもありません。
他のアイデアはありますか?
編集2:
問題が解決しました。どのように推測します。私はうなり声サーバーを再起動し、直接作業しました。
後でバグを再現して、報告する必要があるかどうかを確認します
angularjs - プロバイダーのプライベート関数に手動で挿入された $window をモックするにはどうすればよいですか?
次のプロバイダーがあります。
そして、次のテスト仕様:
私の質問は、どうすれば$window
両方をモックしTest #1
てTest #2
成功させることができるでしょうか? $provide.value
無数のオブジェクトを試してみましたが、テストを実行spyOn
する価値をあざけることができないようです。$window.navigator.userAgent
これを解決するにはどうすればよいですか?
PS: 上記のコードは、私の問題のデモンストレーションとしてのみ機能し、アプリケーションの特別な要件のため、プロバイダーをサービスに変更できません。
angularjs - $timeout のラッパーであるデコレータをテストするにはどうすればよいですか?
$timeout
内からオリジナルをラップする次のデコレータがあります$rootScope
。$timeout
コントローラー内で使用すると、スコープが破棄されたときに約束をキャンセルするのに役立ちます。
しかし、これを適切に単体テストするにはどうすればよいですか? ここで行うべき 2 つのテストがあるようです... 1)$timeout
が呼び出されたときにオリジナルが呼び出された$rootScope.timeout()
かどうかを確認し、2) スコープが破棄されたときにプロミスがキャンセルされたかどうかを確認します。
これに対する私の現在のテストスイートは次のとおりです。
これが行う唯一のことは、100%のカバレッジを提供することです. しかし、それは私が望むものではありません.これを適切にテストするにはどうすればよいですか?
angularjs - AngularJS : Promise API の success メソッドにデータを返すためのモック http サービス ($httpBackend を使用)
質問のより単純なバージョンを解釈しようとしました。
1)コントローラー(myController)メソッド(減算)のユニットテストを書いています。
2) httpbackend を使用して http をモックする 減算メソッドで http の成功関数に 200 の応答を返し、ダミーの DELETE URL の成功関数でその値を下げたい (テスト環境の外では常に成功する)。
3)しかし、expect(scope.testvalue) は 5 のみであることがわかります。どんな助けでも大歓迎です。
表示されるエラーは (予想される) エラーです: false が true であると予想されます。