【问题标题】:RSpec testing devise controller actions, DELETE failingRSpec 测试设计控制器操作,DELETE 失败
【发布时间】:2015-12-07 16:39:22
【问题描述】:

我正在使用 RSpec 来测试我对 Devise 和 simple_token_authentication gem 的混合实现。


我使用 devise_for 告诉 Devise 在哪里寻找我的会话控制器 (source)。

 devise_for :users, controllers: { 
    registrations: 'users/devise/registrations',
    sessions: 'users/devise/sessions'
  }

在我的会话控制器中,如果请求具有特定标头 (source),我将调用自定义方法。

def create
  req_from_coposition_app? ? respond_with_auth_token : super
end

def destroy
  req_from_coposition_app? ? destroy_auth_token : super
end

我有一个测试可以确保用户可以获得一个身份验证令牌。 该请求按预期工作 (source)。

it "should be able to sign in" do
  request.headers["X-Secret-App-Key"] = "this-is-a-mobile-app" 
  request.env['devise.mapping'] = Devise.mappings[:user]
  post :create, 
    user: {
      email: user.email,
      password: user.password
    }, 
    format: :json

  expect(res_hash[:email]).to eq user.email
  expect(res_hash[:authentication_token]).to eq user.authentication_token
end

接下来,我想测试退出(销毁身份验证密钥)。 我正在尝试使用以下代码:

it "should be able to sign out" do
  token_before = user.authentication_token
  request.env['devise.mapping'] = Devise.mappings[:user]
  request.headers["X-Secret-App-Key"] = "this-is-a-mobile-app"
  request.headers["X-User-Token"] = token_before
  delete :destroy, nil, format: :json
  expect(user.reload.authentication_token).to_not eq token_before
end

但是,Users::Devise::SessionsController#destroy 永远不会被击中。 response.status302,并且

response.body
#=> "<html><body>You are being <a href=\"http://test.host/\">redirected</a>.</body></html>"

我检查了 rake 路由,以不同的方式格式化了请求,并检查了 delete 方法没有被任何地方弄乱。我完全不知道为什么post :create 有效,但delete :destroy 没有采取行动。

【问题讨论】:

  • simple_token_authentication README 示例显示了标头中的 X-User-Token X-User-Email 字段。也许您还需要提供 X-User-Email?

标签: ruby-on-rails ruby rspec devise


【解决方案1】:

你没有在 https://github.com/plataformatec/devise/blob/master/app/controllers/devise/sessions_controller.rb987654321@ 处欺骗第 4 行的 before 过滤器

Devise 认为没有人登录并让您远离销毁操作。跳过它,存根它,欺骗它。

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多