Angularjs+;每次注入前的UnitTest未执行

Angularjs+;每次注入前的UnitTest未执行,angularjs,coffeescript,jasmine,karma-jasmine,Angularjs,Coffeescript,Jasmine,Karma Jasmine,我正在尝试编写angularjs规范,但是beforeach注入块没有被执行,导致测试服务未定义 describe 'VodAssetsTriageController', -> $charterModal = null controller = null FieldService = null $q = null $rootScope = null $scope = null VodAssetsService = null PidService =

我正在尝试编写angularjs规范,但是beforeach注入块没有被执行,导致测试服务未定义

describe 'VodAssetsTriageController', ->
  $charterModal = null
  controller = null
  FieldService = null
  $q = null
  $rootScope = null
  $scope = null
  VodAssetsService = null
  PidService =
    getPids: _.noop
  AdiSearchService =
    getHeadEnds: _.noop

  beforeEach module('alphonso', ($provide) ->
    $provide.factory 'AdiSearchService',
      $get: -> AdiSearchService
    $provide.factory 'PidService',
      $get: -> PidService
  )


  beforeEach inject ($controller, _VodAssetsService_, _VodAssetsFieldService_,            _$charterModal_, _$q_, _$rootScope_, _AdiSearchService_, _PidService_) ->

     controller = $controller
     $charterModal = _$charterModal_
     VodAssetsService = _VodAssetsService_
     FieldService = _VodAssetsFieldService_
     $q = _$q_
     $rootScope = _$rootScope_
     $scope = $rootScope.$new()
     AdiSearchService = _AdiSearchService_
     PidService = _PidService_

     result =
      content: []
     spyOn PidService, 'getPids'
      .and.returnValue $q.when(result)
     spyOn AdiSearchService, 'getHeadEnds'
      .and.returnValue $q.when(result)

     controller = controller 'VodAssetsTriageCtrl',
      VodAssetsService: VodAssetsService,
      VodAssetsFieldService: FieldService,
      $scope: $scope,
      $charterModal: $charterModal

     installPromiseMatchers()

  describe 'controller.paginate.onChange()', ->
    result = null
    searchDeferred = null

    beforeEach ->
      page =
        size: 1000
        totalElements: 179000
      response =
        content: []
        number: 0
        page: page
      result =
       response: response
      searchDeferred = $q.defer()
      spyOn VodAssetsService, 'getAll'
        .and.returnValue searchDeferred.promise
      $scope.searchVm =
        doSearch: () -> controller.search()

    it 'should invoke controller.paginate.onChange() on search() invocation', ->
      controller.search controller
      expect controller.paginate.loading
       .toBeTruthy()

      spyOn controller.paginate, 'onChange'
      promise = searchDeferred.resolve(result)
      $rootScope.$apply()

      expect promise
        .toBeResolvedWith response
      expect vm.paginate.totalElements
        .toBe 179
      expect controller.page
        .toBe result.response.page.number
      expect controller.size
        .toBe result.response.page.size
      expect controller.paginate.loading
        .toBeFalsy()
      expect controller.paginate.onChange
        .toHaveBeenCalled()

    it 'should page to vm.paginate.page = 1', ->
      controller.paginate.page = 1
      controller.paginate.cache[0] = _.range 0, 1000
      spyOn $scope.searchVm, 'doSearch'
      controller.paginate.onChange()

      expect vm.page
        .toBe 1
      expect $scope.searchVm.doSearch
        .not.toHaveBeenCalled()
      expect controller.vodAssets.length
        .toBe vm.paginate.size
当我执行代码时,我得到以下错误

大宗报价 错误:[ng:areq]参数“fn”不是函数,已获取对象 在/Users/rbrooks3/sandbox/alphonso-web/bower_-components/angular/angular.js(第1815行)中 assertArg@/Users/rbrooks3/sandbox/alphonso web/bower_components/angular/angular.js:1815:91 assertArgFn@/Users/rbrooks3/sandbox/alphonso web/bower_components/angular/angular.js:1825:12 注释@/Users/rbrooks3/sandbox/alphonso web/bower_components/angular/angular.js:3810:16 $$annotate@/Users/rbrooks3/sandbox/alphonso web/bower_components/angular mocks/angular mocks.js:2222:41 调用@/Users/rbrooks3/sandbox/alphonso-web/bower_-components/angular/angular.js:4501:46 /Users/rbrooks3/sandbox/alphonso-web/bower\u-components/angular/angular.js:4344:85 forEach@/Users/rbrooks3/sandbox/alphonso web/bower_components/angular/angular.js:340:24 createInjector@/Users/rbrooks3/sandbox/alphonso web/bower_components/angular/angular.js:4344:10 workFn@/Users/rbrooks3/sandbox/alphonso web/bower_components/angular mocks/angular mocks.js:2428:60 TypeError:null不是/Users/rbrooks3/sandbox/alphonso-web/src/app/components/vod-assets-triage/vod-assets-triage.spec.js(第34行)中的对象(计算“$q.defer”) /Users/rbrooks3/sandbox/alphonso-web/src/app/components/vod-assets-triage/vod-assets-triage.spec.js:34:15

有人知道为什么每次注入之前都不调用
函数吗?

这里

  beforeEach(module('alphonso', function($provide) {
    $provide.factory('AdiSearchService', {
      $get: function() {
        return AdiSearchService;
      }
    });
    return $provide.factory('PidService', {
      $get: function() {
        return PidService;
      }
    });
  }));
模块配置函数不应该返回任何内容,它返回一个对象

另外,它显然应该是
$provide.provider
而不是
$provide.factory
,服务模拟的简短语法是

  beforeEach(module('alphonso', function($provide) {
    $provide.factory('AdiSearchService', {
      AdiSearchService: AdiSearchService,
      PidService: PidService
    });
  }));