問題タブ [ngmock]
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 - ngMock と Jasmine を使用した Angular JS が Promise の問題を引き起こす
Jasmine JS と ngMock は初めてです。
$locationテスト目的でコントローラーに注入するためのangmockおよびアクセスサービスにngMockを注入しようとしているとき。
私は約束の応答を得ていません。私を助けてください。
エラーを下回っています
エラー: タイムアウト - jasmine.DEFAULT_TIMEOUT_INTERVAL で指定されたタイムアウト内に非同期コールバックが呼び出されませんでした。
angularjs - $httpBackend.flush() メソッドがエラーをスローします: [$rootScope:infdig] 10 回の $digest() 反復に達しました。中止しています
Karma と Jasmine を使用して AngularJS アプリケーションを単体テストしようとしています。$httpサービスをモックしたい。そのために、$httpBackend メソッドを使用しています。以下は、テストしたいサービスです。
このサービスの単体テストは次のとおりです。
これは緊急の問題であり、できるだけ早く同じことについて助けが必要です. 私はあなたの答えにとても感謝しています。
angularjs - ngMock を使用して $controller を注入する方法
Karma、Jasmine、および ngMock を使用して、Angular の単体テストを学習しようとしています。Angular のドキュメントには、コントローラーの単体テストの作成方法を示す場所が少なくとも 2 か所ありますが、それらがどのように動作しているかについていくつか質問があります。
コントローラーのドキュメントから、コントローラーのテストに関するセクション:
質問 1:これはほとんど理解できますが、よくわからないことがあります。「MyController」のインスタンスを取得していることは理解していますが、返されたものがどこにも保存または使用されていないように見えるので、正しいオブジェクト$controllerを取得するためにそのコントローラーを取得することしか考えられませんか? $scopeそれでも、どこにも変数に保存されていないように見えるので、これが舞台裏でどのように機能するかについて、まだ少し混乱しています。module()使用しているモジュールを宣言しているように見えますが、他の場所で保存または使用していないように見えるため、どのように機能するかについて同じ混乱がありました。手動で保存する必要がないように、モジュール/コントローラー/スコープをキャッシュする背後に何かがありますか?
Unit Testing docsの別の例を次に示します。
質問 2:ここのbeforeEach関数では、アンダースコアのラッピングを行っています。それは、サービス名を変更せずにずっと同じサービス名を維持できるようにするためですか?
質問 3:次に、it()ブロック$controllerはその処理を実行します。今回は、返されたものを保存しますが、 var controller この時点以降はまだ使用していないようです。では、なぜそれを変数に保存するのでしょうか? it()私が思いつく唯一のことは、このブロック内で再び使用する必要がある場合に備えて保存することですが、この例ではそうではありませんでしたか?
私は良い説明を探していましたが、見つけられないようです。ばかげた説明が抜けていたら申し訳ありませんが、私は時間に追われており、これ以上車輪を回転させることに時間を費やすことができません。
angularjs - $scope local をコントローラーに注入する ngMock
これは、私が尋ねた別の質問の続きで、うまく答えられました。
Karma、Jasmine、および ngMock を使用して AngularJS アプリケーションを単体テストする方法を学んでいます。質問があるコードは次のとおりです。
質問 1:scope新規を作成して、この行の locals インジェクション エリアに含めるのはなぜ$controller('MyController', {$scope: scope});ですか? それは問題なく動作しているように見えます (scope現在、そのコントローラーのオブジェクトを表し、$scope想定されているすべてのプロパティと機能を備えています) が、コードは、コントローラー$scopeを新しく作成した (そして空の) scope(行からscope = $rootScope.$new();)。ですから、私はそれらの地元の人々の目的/内部の仕組みを完全に理解していないと思います.
質問 2:検索の結果、 newscopeが 2 つの一般的な方法で作成される$rootScope.$new()こともわかりscope = {}ました。Angular のドキュメントでさえ、ここ (を使用) とここ (を使用) に見られるように、両方の方法でそれを行っています。なぜ$rootScope.$new()これを別$scope = {}の方法で行うのですか?違いはありますか?
javascript - Angular promise は、後続のすべての単体テストで解決できません (ngMock)
最近、Angular 1.5-rc0 にアップグレードしました。ngMocks への最近の 1 つの変更により、$rootScopeすべてのテストの後に破棄されます。ただし、アプリ内で使用する promise が初めて起動しない理由を理解するのに苦労しています。
右クリック イベントをシミュレートしてコンテキスト メニュー ディレクティブをテストするテストを次に示します。そのディレクティブは別のユーティリティを使用して、HTML テンプレートの読み込み、キャッシュなどを行います。そのサービスは、テンプレートが読み込まれたときに promise を解決します。
ただし、Angular/ngMock 1.5 では、promise は最初の「it」ブロックに対してのみ解決されます。テストごとに再作成する$rootScope必要があるため、何がこれを妨げているのかわかりません。
約束の解決を強制するために手動で呼び出してみまし$rootScope.$apply()たが、ここでは役に立ちません。
プロミスを解決するテンプレート ヘルパーの重要な部分を次に示します。
それが呼び出されることを確認しましdeferred.resolveたが、thenリスナーは決して呼び出しません。