私は最近、単体テストをもう少し深く掘り下げました。プロダクションコードでもスパイを使用する方法があるかどうか疑問に思っていました. 追跡サービスをしています。コードを変更することなく、他のサービスやコントローラーにアクセスできると便利です。
アプリケーションコードでサービスとコントローラーから呼び出されているメソッドをスパイする方法はありますか?そのための最良の方法は何ですか?
大気編集 私はサービスをスパイするためにこのパターンを使用しています:
var vSetFNTrigger = function (sEvent, fnTrigger) { fnTrigger.obj[fnTrigger.sMethod] = (function () { var fnCached = fnTrigger.obj[fnTrigger.sMethod]; return function () { $rootScope.$broadcast(sEvent, {}); return fnCached.apply(this, arguments); }; })(); };
fnTrigger: {
obj: formData, // the service
sMethod: 'qPost' // the method to spy on
},
編集 2 内部関数に戻り値を追加するのを忘れていました。