Cómo espiar la function anónima usando Jasmine

Estoy usando Jasmine para probar mi aplicación angular y quiero espiar una function anónima. Usando el service de notificación angular https://github.com/cgross/angular-notify , quiero saber si se ha llamado o no a la function de notificación.

Aquí está mi controller:

angular.module('module').controller('MyCtrl', function($scope, MyService, notify) { $scope.isValid = function(obj) { if (!MyService.isNameValid(obj.name)) { notify({ message:'Name not valid', classes: ['alert'] }); return false; } } }); 

Y esta es mi testing:

 'use strict'; describe('Test MyCtrl', function () { var scope, $location, createController, controller, notify; beforeEach(module('module')); beforeEach(inject(function ($rootScope, $controller, _$location_, _notify_) { $location = _$location_; scope = $rootScope.$new(); notify = _notify_; notify = jasmine.createSpy('spy').andReturn('test'); createController = function() { return $controller('MyCtrl', { '$scope': scope }); }; })); it('should call notify', function() { spyOn(notify); controller = createController(); scope.isValid('name'); expect(notify).toHaveBeenCalled(); }); }); 

Un return obviamente

 Error: No method name supplied on 'spyOn(notify)' 

Porque debería ser algo así como spyOn (notificar, 'método'), pero como es una function anónima, no tiene ningún método.

Gracias por tu ayuda.

La respuesta de Daniel Smink es correcta, pero tenga en count que la syntax ha cambiado para Jasmine 2.0.

 notify = jasmine.createSpy().and.callFake(function() { return false; }); 

También me pareció útil simplemente devolver una respuesta directamente si solo necesitas una implementación simple

 notify = jasmine.createSpy().and.returnValue(false); 

Puedes encadenar a tu espía con andCallFake ver:

http://jasmine.github.io/1.3/introduction.html#section-Spies:_ andCallFake

  //create a spy and define it to change notify notify = jasmine.createSpy().andCallFake(function() { return false; }); it('should be a function', function() { expect(typeof notify).toBe('function'); }); controller = createController(); scope.isValid('name'); expect(notify).toHaveBeenCalled();