Testing 捕获$http在App.run中使用$httpBackend
我有一个模块Testing 捕获$http在App.run中使用$httpBackend,testing,angularjs,Testing,Angularjs,我有一个模块App,它将检查用户是否已登录 App.run ['$rootScope', 'UserService', ($rootScope, UserService) -> UserService.current_user() ] UserService.current_user()将触发$http请求 那么我如何编写$httpBackend来模拟请求呢?我试过一些方法: describe 'App', -> $httpBackend = null beforeE
App
,它将检查用户是否已登录
App.run ['$rootScope', 'UserService', ($rootScope, UserService) ->
UserService.current_user()
]
UserService.current_user()
将触发$http
请求
那么我如何编写$httpBackend来模拟请求呢?我试过一些方法:
describe 'App', ->
$httpBackend = null
beforeEach(module('App')) # one
beforeEach inject ($injector) -> # two
$httpBackend = $injector.get('$httpBackend')
$httpBackend
.when('GET', '/api/1/users/current_user')
.respond(403, {"error":"not signin"})
it "should get current_user request", () ->
$httpBackend.expectGET('/api/1/users/current_user').respond(403, {'error': 'not signin'})
这将显示错误:
Error: Unexpected request: GET /api/1/users/current_user No more request expected
如果我更改#one
和#two
的顺序。它将显示错误
Error: Injector already created, can not register a module!
这让我陷入沮丧。我需要一些帮助。我让它与此一起工作:
describe 'App', ->
beforeEach angular.mock.module('App')
it "should get current_user request", inject ($httpBackend) ->
$httpBackend.expectGET('/api/1/users/current_user').respond(403, {'error': 'not signin'})
$httpBackend.flush()
如果您将后端期望值放在每个之前,它也会起作用:
describe 'App', ->
beforeEach angular.mock.module('App')
beforeEach inject ($httpBackend) ->
$httpBackend.expectGET('/api/1/users/current_user').respond(403, {'error': 'not signin'})
$httpBackend.flush()
it 'should test someting else', ->
请参见本节中的操作。它显示错误:
错误:喷油器已创建,无法注册模块代码>。哦,这对我不起作用<代码>错误:意外请求:GET/api/1/users/current\u用户不需要更多请求
。我想,angular.mock.module('App')运行时会触发$http。该错误看起来像是您刷新了httpBackend而没有声明您的期望值。启动应用程序时是否只发送了一个请求GET'/api/1/users/current\u user'?如果第一个电话返回403?是的,只有一个请求。它返回403。