2016-06-17 16 views
0

ユニットテスト用にJasmine/Karmaを使用しています。モデルの表示にngDialogを使用していますが、ngDialogを呼び出すコントローラのユニットテストケースが必要です。 コントローラ:ジャスミンを使用したユニットテストでngDialog.openを呼び出す方法

(function() { 
    'use strict'; 
    angular.module('app') 
     .controller('myController', MyController); 

    CongratulationsController.$inject = ['$scope', 
             '$rootScope', 
             'ngDialog']; 

    function CongratulationsController($scope, $rootScope, ngDialog) { 

     $scope.myData = {name: 'test', 
         grade: '5'}; 

     $scope.modal1 = function() { 
     ngDialog.open({ template: 'views/modal/modal-1html', 
      className: 'ngdialog-theme-default', 
      controller: 'ModalController', 
      scope: $scope}); 
     }; 
     $scope.modal2 = function() { 
     ngDialog.open({ template: 'views/modal/modal-2html', 
      className: 'ngdialog-theme-default', 
      controller: 'ModalController', 
      scope: $scope}); 
     }; 
    } 
}()); 

はここに私のユニットテストです:

'use strict'; 
 

 
describe('Controller: MyController', function() { 
 
    var MyController,location, scope, ngDialogInstance; 
 
    ngDialogInstance = { 
 
    open: jasmine.createSpy('ngDialogInstance.open'), 
 
    dismiss: jasmine.createSpy('modalInstance.dismiss') 
 
    }; 
 
    // load the controller's module 
 
    beforeEach(module('app')); 
 
    // Initialize the controller and a mock scope 
 
    beforeEach(inject(function ($controller, $location, $rootScope, _ngDialog_) { 
 
     scope = $rootScope.$new(); 
 
     MyController= $controller('myController', {$scope: scope , 
 
      _ngDialog_: ngDialogInstance 
 
      }); 
 
     location = $location; 
 
     spyOn(scope, 'openModal1'); 
 
    })); 
 
    it('test controller exists', function() { 
 
     expect(!!MyController).toBe(true); 
 
    }); 
 
    
 
    it('test controller calls ng dialog when it calls openModel method', function() { 
 
    scope.openModal1(); 
 
    expect(scope.openModal1).toHaveBeenCalled(); 
 
    expect(ngDialogInstance.open).toHaveBeenCalled(); 
 
    }); 
 
});

私はエラーの下になって、abooveテストケースを実行しています。 が失敗しましたspy ngDialogInstance.openが呼び出されていると予想されます。

どれでもこれを手伝うことができます。

答えて

0

ngDialogInstance.open方法を模擬しなければなりません。だから、コード

it('test controller calls ng dialog when it calls openModel method', function() { scope.openModal1(); expect(scope.openModal1).toHaveBeenCalled(); expect(ngDialogInstance.open).toHaveBeenCalled(); });

のあなたのこの部分は、(注)この

it('test controller calls ng dialog when it calls openModel method', function() { spyOn(ngDialogInstance, 'open'); scope.openModal1(); expect(scope.openModal1).toHaveBeenCalled(); expect(ngDialogInstance.open).toHaveBeenCalled(); });

に変更:spyOnはあなたがテストしようとしている方法をスパイ、それが呼び出されていることをスパイかどうか、正しいパラメータで呼び出されているかどうかなど。

spyOnの公式ドキュメントの詳細はjasmine

0

これは、あなたがラインの下に含める必要はあり

it('test controller calls ng dialog when it calls openModel method', function() { 
    ngDialogInstance.open(); 
    scope.openModal1(); 
    expect(scope.openModal1).toHaveBeenCalled(); 
    expect(ngDialogInstance.open).toHaveBeenCalled(); 
}); 

次のようになります。 

ngDialogInstance.open(); 
関連する問題