Как шпионить за анонимной функцией с помощью Jasmine

Я использую Jasmine для проверки своего углового приложения и хочу следить за анонимной функцией. Использование службы angular-notifyhttps://github.com/cgross/angular-notifyЯ хочу знать, была ли вызвана функция уведомления или нет.

Вот мой контроллер:

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;
    }
  }
});

И вот мой тест:

'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();
  });
});

Очевидное возвращение:

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

Потому что это должно быть что-то вроде spyOn (notify, 'method'), но так как это анонимная функция, у нее нет никакого метода.

Спасибо за вашу помощь.

Ответы на вопрос(0)

Ваш ответ на вопрос