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。