2015-10-28 3 views
1

Я пытаюсь протестировать небольшой контроллер, написанный в AngularJS с использованием Jasmin.проверка углового контроллера (метод/служебные вызовы) с использованием Jasmine

(function() { 
'use strict'; 
angular 
    .module('bsp.account') 
    .controller('Account', Account); 

/* @ngInject */ 
function Account(userService, accountService) { 

    var vm = this; 

    vm.title = 'Account'; 

    vm.username = userService.getUsername(); 
    vm.showPasswordModal = accountService.showPasswordModal; 
    vm.showLogoutModal = accountService.showLogoutModal; 
} 
})(); 

Я хочу проверить vm.username, vm.showPersonModal и vm.showLogoutModal.these все ссылки на службу закачиваемой в контроллере. Я довольно новый и медленно пытаюсь построить свою концепцию при тестировании. Ниже приводится часть тестовых случаев, работающих в настоящее время,

describe('Account', function() { 
    var scope, controller, userServiceMock,accountServiceMock; 
    beforeEach(module('bsp')); 
    beforeEach(function() { 
    userServiceMock = { 
     getUsername: function(){} 
    }; 
    accountServiceMock = { 
     showPasswordModal :function(){} 
    }; 
    }); 

    beforeEach(inject(function($rootScope, $controller) { 
    scope = $rootScope.$new(); 
    controller = $controller('Account', { 
     'userService': userServiceMock, 
     'accountService':accountServiceMock 
    }); 
    })); 

describe('testing Title',function(){ 
    it('checkTitle', function(){ 
    expect(controller.title).toEqual('Account'); 
    }); 
}); 


}); 

Спасибо за все ваши предложения

+0

Похоже, что вы в хорошем состоянии. В чем проблема? – Phil

+0

@Phil, я понятия не имею, как проверить эти три строки кода! – sg28

ответ

0

только проблемы, я могу видеть, что

  1. Вы самонастройки неправильный модуль (должен be 'bsp.account' вместо 'bsp')
  2. Вы не предоставили средств для проверки того, что ваши методы обслуживания называются

Вы можете обратиться к последнему, используя spies. Например,

describe('Account', function() { 
    var controller, userServiceMock, accountServiceMock; 

    beforeEach(function() { 
     module('bsp.account'); 

     userServiceMock = jasmine.createSpyObj('userService', ['getUsername']); 
     userServiceMock.getUsername.and.returnValue('testUser'); 

     accountServiceMock = jasmine.createSpyObj('accountService', ['showPasswordModal', 'showLogoutModal']); 

     inject(function($controller) { 
      controller = $controller('Account', { 
       userService: userServiceMock, 
       accountService: accountServiceMock 
      }); 
     }); 
    }); 

    it('assigns values from services', function() { 
     expect(userServiceMock.getUsername).toHaveBeenCalled(); 
     expect(controller.username).toEqual('testUser'); 
     expect(controller.showPasswordModal).toBe(accountServiceMock.showPasswordModal); 
     expect(controller.showLogoutModal).toBe(accountServiceMock.showLogoutModal); 
    }); 
}); 
+0

TypeError: 'undefined' не является объектом (оценивающий 'userServiceMock.getUsername.and.returnValue') в /vagrant/frontend/src/app/account/account.controller.spec.js:47 Ожидаемый шпион userService.getUsername для были вызваны. ТипError: 'undefined' не является объектом (оценка 'controller.username') \t по адресу /vagrant/frontend/src/app/account/account.controller.spec.js:62 – sg28

+0

, m получение этой ошибки в тесте , метод getusername is ---- self.getUsername = function() { return getUserObj(). username; }; – sg28

+0

@ sg28 какая версия Жасмина? Если 1.x метод ['andReturn'] (http://jasmine.github.io/1.3/introduction.html#section-Spies:_ andReturn) вместо' and.returnValue' – Phil