1

Ich schreibe einen Testfall für das folgende Szenario. Die Codeabdeckung ist nicht vollständig abgedeckt. Ich weiß nicht, ob es möglich ist zu schreiben oder nicht. wenn ich frage etwas falsch Mittel freundlich leiten mich einen Testfall für dieses Szenario zu schreiben und dieses Problem in vermeiden future.At-dest seinem möglichen sagen oder nichtWie schreiben wir Unit-Testfälle (Jasmine) für verschachtelte Funktionen?

(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(); 

    }) 

Oben ist mein Testfall es auf dem Kind vertuschen Controller und nicht seine verschachtelten Funktionen. Können wir auf die Scope-Variable in Test Case aus der controller.js-Datei zugreifen. Und auch die Codeabdeckung deckt nur die ChangeDataController-Funktion allein ab, nicht ihre Funktionen auf der Innenseite. Bitte hilf mir, einen Testfall zu schreiben und meine Zweifel zu klären.

+0

Wie die Antwort schon vermuten lässt, dass jede Funktion ausspioniert werden soll oder verspottet sollte als Scope-Methode (oder Controller-Methode) verfügbar gemacht. – estus

+0

hi estus Ich habe meinen Code aktualisiert. Und kannst du versuchen, herauszufinden, was ich falsch gemacht habe? – Sathish

+0

Sie haben addData nicht als Methode angegeben, und editDatas wird aus irgendeinem Grund in ChangeDataController festgelegt. Es gibt überhaupt keinen Grund, $ scope wie das in der Komponente zu verwenden, das ist antipattern. – estus

Antwort

0

Die Antwort ist, dass Sie diese inneren Funktionen offen legen oder indirekt testen sollten. Überall, wo die Methode addData aufgerufen wird, können Sie einfach sicherstellen, dass Sie diese Funktion getestet haben und verschiedene Parameter an die aufrufende Funktion übergeben.

Oder wenn Sie addData zum $scope hinzufügen können Sie leichter testen:

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

In Ihrem Test:

+0

Ich habe es auf die gleiche Weise versucht, aber ich kann nicht.Ich habe meinen Code aktualisieren können Sie bitte sehen? – Sathish

Verwandte Themen