依存関係を持つAngularJSファクトリーのユニットテスト
2023-07-14 18:08:17
質問
Angularファクトリーをユニットテストする場合(Karma + Jasmineを使用)、テスト対象のファクトリーにスタブ依存関係を注入するにはどうすればよいですか?
ここに私のファクトリーがあります。
mod = angular.module('myFactoryMod', []);
mod.factory('myFactory', [
'$log', 'oneOfMyOtherServices', function($log, svc) {
return makeSomethingThatDoesSomethingWithTheseDependencies($log, svc);
}
]);
oneOfMyOtherServices
は私のファクトリーをインスタンス化するときに必要です。
これが私のテストです。
it('can get an instance of my factory', function() {
var oneOfMyOtherServicesStub;
angular.mock.module('myFactoryMod');
oneOfMyOtherServicesStub = {
someVariable: 1
};
//****How do I get my stub in my target? ****
angular.mock.inject(['myFactory', function(target) {
expect(target).toBeDefined();
}
]);
})
N.B. 私は知っています。
$controller
はコントローラに対してこれを可能にしますが、ファクトリーに対しては同等のものが見当たりません。
どのように解決するのですか?
私が知っている限りでは、このようなことを実現する方法は2つあります。
-
使用する
$provide
と匿名モジュールを使ってモックをインジェクトします。 - モックにしたいサービスをインジェクトし、jasmineのスパイ機能を使ってモック値を提供します。
2つ目の方法は、テスト対象のコードが注入されたサービス上でどのメソッドを呼び出すかを正確に知っていて、それらを簡単にモック化できる場合にのみ有効です。 あなたは(メソッドではなく)サービスのデータプロパティにアクセスしているようなので、最初のオプションを追求することが最善かもしれません。
使用方法
$provide
を使うと、大体こんな感じになります。
describe('myFactory', function () {
// Load your module.
beforeEach(module('myFactoryMod'));
// Setup the mock service in an anonymous module.
beforeEach(module(function ($provide) {
$provide.value('oneOfMyOtherServicesStub', {
someVariable: 1
});
}));
it('can get an instance of my factory', inject(function(myFactory) {
expect(myFactory).toBeDefined();
}));
});
関連
-
[解決済み】Angularjs accordion ng-click on panel-header
-
[解決済み] プリフライト応答が成功しない
-
[解決済み] AngularJs ReferenceError: $http is not defined
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] どのようにangularJSでrouteProviderとlocationProviderを設定するのですか?
-
[解決済み] AngularJSの「href」と「ng-href」の違いについて
-
[解決済み] ng-pattern` - 数字だけをチェックする方法は?
-
angularjs が src で指定されたコンテンツを iframe 内で正しく表示しない
-
AngularJS がエラー $digest already in progress を報告する
-
[解決済み] ng-modelとng-bindの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ページロード時にAngularJSのコントローラ関数を実行する方法は?
-
[解決済み] Angular UI-Routerのマルチビュー
-
[解決済み] md-selectでデフォルト値を設定する方法
-
[解決済み] angularjsで$compileを操作する
-
AngularJSのベストプラクティス。ng-repeatの$indexに注意する。
-
[解決済み] AngularJSとHandlebars - 両方必要なのかどうか
-
[解決済み] Jasmineの "callThrough "と "callFake() "の実用的な例が欲しい
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] AngularJSでEnterキーを押したときにフォームを送信する
-
[解決済み] Jasmineを使ってAngularJSのサービスをテストするにはどうすればよいですか?