0

以下对 location.path 的间谍失败并出现错误:

试图将未定义的属性路径包装为函数

it('should redirect location.path', function() {
 sinon.spy(location, 'path');
 scope.create();
 expect(location.path).to.have.been.calledOnce;
 location.path.restore();

模拟控制器:

describe('AdminUsersController', function() {
  var Users;
  beforeEach(inject(function(_$controller_, $rootScope, $location, _Users_, _$httpBackend_) {
    var location;
    scope = $rootScope.$new();
    location = $location;
    controller = _$controller_('AdminUsersController', {
      $scope: scope,
      $location: location
    });

我正在尝试测试的行:

$scope.create = function() {
  return $location.path("admin/users/newuser?create");
};
4

1 回答 1

0

这个问题的解决方案是另一个愚蠢的咖啡脚本。我之前没有定义位置。我在coffeescript中的代码如下:

describe 'AdminControllers', () ->

  scope = undefined
  location = undefined
  $httpBackend = undefined

  beforeEach module 'heliotrope.controllers.admin'

  describe 'AdminUsersController', () ->

    beforeEach inject (_$controller_, $rootScope, $location, _Users_, _$httpBackend_) ->
      scope = $rootScope.$new()
      location = $location
      controller = _$controller_ 'AdminUsersController', {
        $scope: scope
        $location: location
      }
      $httpBackend = _$httpBackend_

    describe 'creating a new user', () ->

      it 'should redirect location.path', () ->
        sinon.spy(location, 'path')
        scope.create()
        expect(location.path).to.have.been.calledOnce
        location.path.restore()
于 2017-03-20T14:15:53.823 回答