私はカルマテストランナーとジャスミンテストフレームワークでAngularJSでユニットテストを設定しました。私のコードカバレッジレポートは、私のテストでどのラインと条件がカバーされているかをうまく示しています。このカバレッジレポートでは、私のコードで条件付きのif
がテストされていないことがわかりました。 angular.forEach()
コールのモックを作成する必要はありますか?もしそうなら、正確にこれを行うには? ngMockで?AngularJSユニットテストで条件付きが呼び出されたかどうかのテスト
ご質問をより明確にするため、angular.forEach()
コールでif
という条件を使用した例をご提供します。
言ってやる例えば、私は次のサービスがあります。
angular.module('myApp').service('myService', function() {
function myFunction(myFunctionParameters) {
// ... Some irrelevant code...
var x = [];
angular.forEach(xObjs, function(o) {
if (some condition) { // <--- Code coverage says this is not tested!!
// do something...
}
});
// ... Some more irrelevant code
return // Something //
}
return {
myFunction: myFunction
};
});
"MYSERVICE" のためのテストはこのようなものが考えられます。
describe("myService", function() {
// Some variables
// Declare the mocking variable
// Invoke the module
beforeEach(module('myApp'));
beforeEach(function(){
// Define the mock variable
mockVariable = <define mock variable here>
module(function($provide) {
$provide.value('serviceToMockName', mockVariable);
});
// Inject the services
inject(function(_myService_) {
myService = _myService_;
});
// Spy on the mock
// Call myFunction function in myService
result = myService.myFunction(functionParameters);
});
// Write some tests for the myFunction call in myService
describe("myFunction", function() {
it("should test the if condition...", function() {
// How to make sure I did the condition check in the if statement!!
});
});
});
コードカバレッジ緑色で強調表示
をライン21,22および24である。赤で強調表示されている唯一のラインは、if
の条件である23である。したがって、私はif
(24行目は緑色で強調表示されているため)と入力していますが、if
の条件自体はカバーされていません。
21 11 var x = [];
22 11 angular.forEach(xObjs, function(o) {
23 55 if (o.values.length) {
24 55 x.push(o.values[o.values.length-1]);
25 }
26 });
ありがとうございます。私はあなたの答えを評価しましたが、私はこれが私の問題の解決策ではないと思います。コードカバレッジの例を含めるように質問を編集し、実際のif自体を除いてすべての行がどのように "カバーされている"のかを明確に説明しましたか?何か案は?また、私がこれを考えるのが間違っていれば私を修正してください。私のサービスにコードを追加するのは正しいとは思いません。それは単体テストで使用する変数を数えることだけです。 – effort
本当にこれを特定するには、本当にコードカバレッジが適切です。私は私のプロジェクトでこれを行うためにカルマを使用しています。カバレッジが完了していれば、ラインごとにレポートを提供するので興味深いです:https://www.npmjs.com/package/karma-coverage –
ここに同じです。私は、これを行うためにカルマの範囲を使用し、私のテストを実行するためにgulpを使用します。それでも、私の「if」条件がテストでカバーされているかどうかを確認する方法を見つけることができませんか? – effort