Sinon 间谍:尝试将 undefined 属性 'path' 包装为函数

Sinon spy: Attempted to wrap undefined property 'path' as function

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

Attempted to wrap undefined property path as function

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

这个问题的解决方案是另一个愚蠢的 coffeescript 东西。我之前没有定义位置。我在 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()