さて、私は長い間いくつかの問題に出くわしてきました。他のコミュニティからの意見を聞きたいと思います.
まず、いくつかの抽象コントローラーを見てみましょう。
function Ctrl($scope, anyService) {
$scope.field = "field";
$scope.whenClicked = function() {
util();
};
function util() {
anyService.doSmth();
}
}
明らかに、ここにあります:
$scope
一部のサービスが注入されたコントローラーの通常の足場- スコープにアタッチされたいくつかのフィールドと関数
- プライベートメソッド
util()
ここで、このクラスを単体テスト (Jasmine) でカバーしたいと思います。ただし、問題は、メソッドが呼び出されるwhenClicked()
アイテムをクリック (call ) したときに確認したいことです。ジャスミンのテストでは、モックが定義されていないutil()
か、呼び出されていないというエラーが常に発生するため、その方法がわかりません。util()
注: この特定の例を修正しようとしているわけではなく、一般的なコード パターンのテストについて質問しています。ですから、「正確なエラーとは」とは言わないでください。これを修正する方法ではなく、それを行う方法を尋ねています。
私はこれを回避する方法をいくつか試してきました:
$scope
この関数がこのオブジェクトに関連付けられていないため、ユニットテストで使用できないことは明らかです(通常、メッセージExpected spy but got undefined
などで終了します) 。- これらの関数をコントローラーオブジェクトにアタッチしてから、
Ctrl.util = util;
モックを検証しようとしCtrl.util = jasmine.createSpy()
ましたが、この場合Ctrl.util
は呼び出されていないため、テストは失敗します util()
オブジェクトにアタッチして再びthis
嘲笑するように変更しようとしましたが、うまくいきませんでしたCtrl.util
まあ、私はこれを回避する方法を見つけることができません.JS忍者からの助けを期待しています.動作するフィドルは完璧です.