2014-02-16 72 views
0

我的登录控制器是:噶测试没有做什么预期

angular.module('mean').controller('LoginController', ['$scope', '$location', '$rootScope', 'UserService', function ($scope, $location, $rootScope, UserService) { 
    $scope.init = function() { 
    $scope.credentials = {}; 
    $scope.status_object = { 
     text: '', 
     class: '', 
     show: false 
    };  
    } 

    $scope.authenticate = function() { 
    $scope.status_object = { 
     text: 'Authenticating...', 
     class: 'info', 
     show: true 
    }; 
    UserService.authenticate($scope.credentials).then(function(response) { 
     if(response.data.status === 'error') { 
     $scope.status_object = { 
      text: response.data.error, 
      class: 'danger', 
      show: true 
     }; 
     } else if(response.data.status === 'ok') { 
     $rootScope.globals.logged_in = true; 
     $location.path('/' + response.data.user.access); 
     } 
    }); 
    }; 
}]); 

我的测试是:

describe('LoginController', function() { 
    beforeEach(module('mean')); 

    var scope, rootScope, LoginController, $httpBackend, $location; 

    beforeEach(inject(function($controller, $rootScope, _$httpBackend_, _$location_) { 
     scope = $rootScope.$new(); 
     rootScope = $rootScope.$new(); 

     LoginController = $controller('LoginController', { 
     $scope: scope, 
     $rootScope: rootScope 
     }); 

     $httpBackend = _$httpBackend_; 

     $location = _$location_; 
    })); 

    it('should show danger when wrong credentials are used', function() { 
     scope.credentials = { 
     email: '[email protected]', 
     password: 'password' 
     } 

     $httpBackend.expectPOST('/api/v1/user/auth').respond({ 
     status: 'error', 
     error: 'Invalid User' 
     }); 

     console.log(scope.status_object); 
     scope.authenticate(); 
     $httpBackend.flush(); 


     expect(scope.status_object).toEqualData({text: 'Invalid User', class: 'danger', show: true}); 
    }); 
    }); 

在我看来,我有一个ng-init="init()"。一切顺利的作品在前端,但在运行我的测试时,我得到:

PhantomJS 1.9.7 (Mac OS X) LoginController should show danger when wrong credentials are used FAILED 
    TypeError: 'undefined' is not a function (evaluating 'expect(scope.status_object).toEqualData({text: 'Invalid User', class: 'danger', show: true})') 
     at /myapp/test/karma/unit/controllers/login.spec.js:43 
PhantomJS 1.9.7 (Mac OS X): Executed 4 of 4 (1 FAILED) (0.135 secs/0.043 secs) 

不知道什么我的测试是做错了。有任何想法吗?

回答

2

原来的行:expect(scope.status_object).toEqualData({text: 'Invalid User', class: 'danger', show: true});导致了错误。没有toEqualData,所以我用toEqual,而不是它的工作现在

4

是的,你需要首先定义toEqualData,例如,一路Angular tutorial做的:

beforeEach(function(){ 
    this.addMatchers({ 
     toEqualData: function(expected) { 
     return angular.equals(this.actual, expected); 
     } 
    }); 
    });