1

次のシナリオのテストケースを記述しています。コードカバレッジは完全にはカバーされていません。私は書くことができるかどうか分からない。私は何も悪いことを言わせれば親切に上記 ネストされた関数のUnitテストケース(Jasmine)はどのように記述しますか?

(function() { 
    'use strict'; 

    angular 
     .module('myApp') 
     .component("testLockCtrl", { 
      templateUrl: 'wwwroot/html/myLocation/testLock.html', 
      controller: 'testLockCtrl as vm' 
     }) 
     .controller("testLockCtrl", testLockCtrl); 

    testLockCtrl.$inject = ['SessionService', 'HttpRequestSoapAPI']; 
    /*Parent Controller*/ 
    function testLockCtrl($rootScope, $mdDialog) { 

     vm.ChangeDataController=ChangeDataController; 
     /*childer controller*/ 
     function ChangeDataController($scope) { 
      $scope.tempData = true; 
      /*following functions (child of change data controller) can called in click*/ 
      $scope.editData = function() { 

       $scope.tempData = false; 
      } 


      $scope.editDatas = function() { 

       /*some code*/ 
      } 

     } 

     function addData() { 
      TC$DialogMgr.tag(function(tagID) { 
       $mdDialog.show({ 
        locals: { testCase: vm }, 
        controller: ChangeDataController, 
        parent: angular.element(document.body), 
        templateUrl: "wwwroot/html/myLocation/addData.html", 
        clickOutsideToClose: true, 
        preserveScope: true, 
        controllerAs: 'vm' 
       }).then(function() { 

       }, function() { 

       }).finally(function() { 
        TC$DialogMgr.unTag(tagID); 
       }); 
      }, TC$DialogMgr.type.Input); 
     } 
    } 

})(); 

it("Should check if Module Flag status is received", function() { 
     var data = [{ loc: 'mde', Status: -1 }]; 
     testLockCtrl.ChangeDataController(data); 
     var testData=testLockCtrl.editDatas() 
     expect(testData).toBeDefined(); 

    }) 

その可能かどうかを教えてくれ、このシナリオのためのテストケースを書き、future.At-以上にこの問題を回避するために私を導く意味私のテストケースで、それは子供にまでカバーすることができますそのネストされた関数ではありません.content.jsファイルからtest caseのスコープ変数にアクセスできるようにしてください。また、コードカバレッジは、内部の関数ではなくChangeDataController関数だけをカバーします。テストケースを作成し疑いを明確にするのを助けてください。

+0

答えが示唆するように、スパイや嘲笑する必要があり、すべての機能があるべきスコープ(またはコントローラ)メソッドとして公開されます。 – estus

+0

こんにちはestus私は私のコードを更新しました。そして、あなたが間違っていたものを見つけることを試みることができますか? – Sathish

+0

メソッドとしてaddDataを公開しておらず、何らかの理由でeditDataがChangeDataController内で設定されています。コンポーネントに$スコープを使用する理由はまったくありません。これは反パターンです。 – estus

答えて

0

答えは、それらの内部関数を公開するか間接的にテストする必要があるということです。 addDataメソッドが呼び出されているところでは、その関数をテストして、呼び出し元関数に異なるパラメータを渡すだけで十分です。

それとも、あなたがより簡単にテストすることができます$scopeaddDataを追加する場合:

$scope.addData = function() { /* ... */ }; 

をあなたのテストでは:

+0

私は同じ方法を試しましたが、私はcant.iを更新しました。私のコードを見てください。 – Sathish

関連する問題