2017-08-09 4 views
0

私はコード内でモーダルを開くためにAngular-UIの$ uibModalを使用しています。 openメソッドを呼び出すと、open.then()で実行するコードを定義しました。& closed.then()は約束しています。このすべてはうまくいきますが、ジャスミンでテストしようとすると、オープンとクローズの約束事を解決する方法がわかりません。

function backButtonClick() { 
    var warningModal = $uibModal.open({ 
    animation: true, 
    ariaLabelledBy: 'modal-warning-header', 
    ariaDescribedBy: 'modal-alert-body', 
    backdrop: 'static', 
    templateUrl: 'app/components/directives/modals/alertModal/alertModal.html', 
    controller: 'AlertModalController', 
    controllerAs: 'vm', 
    size: 'sm', 
    resolve: { 
     options: function() { 
     return { 
      title: stringsService.getString('WorkNotSavedTitle'), 
      message: stringsService.getString('WorkNotSavedMessage'), 
      modalHeaderClass: 'modal-warning-header', 
      modalHeaderIconClass: 'fa-warning modal-warning-alert-icon', 
      modalHeaderTitleClass: 'modal-warning-alert-title', 
      modalContentClass: 'modal-warning-content', 
      modalButtonsClass: 'modal-centered-buttons', 
      showModalHeader: true, 
      showPrimaryButton: true, 
      showSecondaryButton: false, 
      showTertiaryButton: true, 
      primaryButtonText: stringsService.getString('RemainInActivityButton'), 
      primaryButtonClick: function() { warningModal.dismiss(); }, 
      tertiaryButtonText: stringsService.getString('LeaveActivityButton'), 
      tertiaryButtonClick: function() { warningModal.dismiss(); leaveActivity(); } 
     }; 
     } 
    } 
    }); 
    warningModal.opened.then(function() { vm.isWarningModalOpen = true; }); 
    warningModal.closed.then(function() { vm.isWarningModalOpen = false; }); 
} 

と私がこれまで持っているテスト:

it('should show the Warning modal if the back button is clicked', function() { 
    var modalServiceMock = { 
     open: function(options) {} 
    };  
    sinon.stub(modalServiceMock, 'open').returns({ 
     dismiss: function() { return; }, 
     opened: { 
     then: function(callback) { return callback(); } 
     }, 
     closed: { 
     then: function(callback) { return callback(); } 
     } 
    });   
    var ctlr = $controller('BayServiceController', { $scope: this.$scope, $uibModal: modalServiceMock}); 
    ctlr.backButtonClick(); 

    //this line passes 
    expect(modalServiceMock.open).toHaveBeenCalled(); 
    //this line fails 
    expect(ctlr.isWarningModalOpen).toBe(true); 
}); 

答えて

0

オクラホマので、していた可能性があり、ここで

は、私は(私のコントローラで)モーダルを開くために使用したコードですそれについてはより良い方法ですが、これはうまくいくようですので、ここで私が思いついたのです。

it('should show the Warning modal if the back button is clicked', function() { 
    modalServiceMock = { 
    open: function(modalOptions) { 
     var closedCallback; 
     return { 
     dismiss: function() { closedCallback(); }, 
     opened: { 
      then: function(callback) { callback(); } 
     }, 
     closed: { 
      then: function(callback) { closedCallback = callback; } 
     }, 
     resolver: modalOptions.resolve 
     }; 
    } 
    };   
    var ctlr = $controller('BayServiceController', { $scope: this.$scope, $uibModal: modalServiceMock}); 
    ctlr.backButtonClick(); 

    this.rootScope.$apply(); 
    expect(ctlr.isWarningModalOpen).toBe(true); //this now passes 

    //to test closing the modal, I access the resolver property of the mock and run the given method for dismissing the modal 
    ctlr.warningModal.resolver.options().primaryButtonClick(); 

    expect(ctlr.isWarningModalOpen).toBe(false); 

}); 
関連する問題