Javascript.confirm() and Angularjs Karma e2e test

后端 未结 3 388
暖寄归人
暖寄归人 2021-02-05 15:44

I have an Angularjs application that uses simple javascript confirm before executing some actions.

Controller:

function TokenControll         


        
3条回答
  •  臣服心动
    2021-02-05 16:11

    E2E Testing

    Please consult to this project: https://github.com/katranci/Angular-E2E-Window-Dialog-Commands

    Unit Testing

    If you create a service for the dialog boxes then you can mock that service in your unit test in order to make your code testable:

    Controller

    function TokenController($scope, modalDialog) {
      $scope.token = 'sampleToken';
    
      $scope.newToken = function() {
        if (modalDialog.confirm("Are you sure you want to change the token?") == true) {
          $scope.token = 'modifiedToken';
        }
      };
    }
    

    modalDialog service

    yourApp.factory('modalDialog', ['$window', function($window) {
        return {
            confirm: function(message) {
                return $window.confirm(message);
            }
        }
    }]);
    

    modalDialogMock

    function modalDialogMock() {
        this.confirmResult;
    
        this.confirm = function() {
            return this.confirmResult;
        }
    
        this.confirmTrue = function() {
            this.confirmResult = true;
        }
    
        this.confirmFalse = function() {
            this.confirmResult = false;
        }
    }
    

    Test

    var scope;
    var modalDialog;
    
    beforeEach(module('yourApp'));
    
    beforeEach(inject(function($rootScope, $controller) {
        scope = $rootScope.$new();
        modalDialog = new modalDialogMock();
        var ctrl = $controller('TokenController', {$scope: scope, modalDialog: modalDialog});
    }));
    
    it('should be able to generate new token', function () {
       modalDialog.confirmTrue();
    
       scope.newToken();
       expect(scope.token).toBe('modifiedToken');
    });
    

提交回复
热议问题