angularjs - ejemplo - ng-init
¿Cómo cambiar el valor de retorno del espía jazmín? (1)
Intenta esto en su lugar. La API cambió para Jasmine 2.0:
authService.currentUser.and.returnValue(''bob'');
Documentación:
http://jasmine.github.io/2.0/introduction.html#section-Spies
Estoy usando Jasmine para crear un espía así:
beforeEach(inject(function ($injector) {
$rootScope = $injector.get(''$rootScope'');
$state = $injector.get(''$state'');
$controller = $injector.get(''$controller'');
socket = new sockMock($rootScope);
//this is the line of interest
authService = jasmine.createSpyObj(''authService'', [''login'', ''logout'', ''currentUser'']);
}));
Me gustaría poder cambiar lo que devuelven los distintos métodos de authService
.
Aquí está cómo se configuran las pruebas reales:
function createController() {
return $controller(''UserMatchingController'', {''$scope'': $rootScope, ''socket'':socket, ''authService'': authService });
}
describe(''on initialization'', function(){
it(''socket should emit a match'', function() {
createController();
expect(socket.emits[''match''].length).toBe(1);
});
it(''should transition to users.matched upon receiving matched'', function(){
//this line fails with "TypeError: undefined is not a function"
authService.currentUser.andReturn(''bob'');
createController();
$state.expectTransitionTo(''users.matched'');
socket.receive(''matchedblah'', {name: ''name''});
expect(authService.currentUser).toHaveBeenCalled()
})
})
Así es como se configura el controlador:
lunchrControllers.controller(''UserMatchingController'', [''$state'', ''socket'', ''authService'',
function ($state, socket, authService) {
socket.emit(''match'', {user: authService.currentUser()});
socket.on(''matched'' + authService.currentUser(), function (data) {
$state.go(''users.matched'', {name: data.name})
});
}]);
Esencialmente, me gustaría poder cambiar el valor de retorno de los métodos espiados. Sin embargo, no estoy seguro de si estoy abordando el problema correctamente al usar jasmine.createSpyObj
.