Angularjs+;每次注入前的UnitTest未执行
我正在尝试编写angularjs规范,但是beforeach注入块没有被执行,导致测试服务未定义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 =
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
});
}));