如何用$promise.then在jasmine规范中模拟AngularJS$资源
我使用如何用$promise.then在jasmine规范中模拟AngularJS$资源,angularjs,unit-testing,jasmine,promise,Angularjs,Unit Testing,Jasmine,Promise,我使用$resource设置一些API调用,在测试过程中,我采用了注入$q然后执行 mockMyService.doSomethingAsync.andReturnValue($q.when(successResponse)) 这已经很好地解决了,但是,我有一个方法如下所示: #MyService MyService.doSomethingAsync(params)。$promise.then-> $scope.isLoading=false #MyService规范 mockMyService
$resource
设置一些API调用,在测试过程中,我采用了注入$q
然后执行
mockMyService.doSomethingAsync.andReturnValue($q.when(successResponse))
这已经很好地解决了,但是,我有一个方法如下所示:
#MyService
MyService.doSomethingAsync(params)。$promise.then->
$scope.isLoading=false
#MyService规范
mockMyService=
doSomethingAsync:jasmine.createSpy('doSomethingAsync'))
它‘调用服务#doSomethingAsync’,->
inject($q)->mockMyService.doSomethingAsync.and.returnValue($q.when(响应))
controller.methodThawapsServiceCall()方法
范围:$apply()
expect(mockMyService.doSomethingAsync).toHaveBeenCalled()
不幸的是,当一个$promise时,上面概述的模拟策略似乎不起作用。然后
在最后被链接起来。我最终出现以下错误:
TypeError:“undefined”不是对象(正在计算“MyService.doSomethingAsync(params)。$promise.then”)
仅以doSomethingAsync()结尾的方法。$promise使用此模拟策略通过测试,没有问题
(其他信息:这些是用Karma和PhantomJS运行的Jasmine测试)事实上,已经解决了 我刚刚将mock改为return
和.returnValue({$promise:$q.when(response)})