【问题标题】:Rails Testing Devise registrations_controllerRails 测试设计registrations_controller
【发布时间】:2019-07-03 21:37:27
【问题描述】:

我只希望拥有特定电子邮件地址的人能够注册。我正在使用设计,这是我的内部控制器/管理员/registrations_controller.rb

class Admins::RegistrationsController < Devise::RegistrationsController
  def create
    if params[:admin][:email] == Rails.application.credentials.development[:admin_email]
      super
    end
 end

我正在尝试在我的测试中发送电子邮件、密码和确认密码。

require 'rails_helper'
RSpec.describe Admins::RegistrationsController do
  it 'does not allow xxx@gmail.com with very-secret password to register' do 
    @request.env["devise.mapping"]=Devise.mappings[:admin]
    patch :create, admin: {email: 'xxx@gmail.com", password: "very-secret", password-confirmations: "very-secret"}
  end
end

我收到一个参数错误:未知关键字:管理员。如何为 Devise 编写正确的补丁请求?

编辑: 我的路线.rb

Rails.application.routes.draw do
  devise_for :admins, controllers: {sessions: 'admins/sessions', 
  registrations: 'admins/registrations'}
  ....

我的耙子路线

admin_registration PATCH  /admins(.:format) 
    admins/registrations#update
                   PUT    /admins(.:format)                                                                        
    admins/registrations#update
                   DELETE /admins(.:format)                                                                        
    admins/registrations#destroy
                   POST   /admins(.:format)                                                                        
    admins/registrations#create

更多信息: 这是使用浏览器打印出来的,它确实在浏览器中工作:

  Started POST "/admins" for ::1 at 2019-7-03 21:08:58 -0500
  Processing by Admins::RegistrationsController#create as HTML
    Parameters: {"utf8"=>"_", "authenticity_token"=>"xxx", "admin"=>{"email"=>"abc@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
  inside registrations_controller.rb CREATE

【问题讨论】:

  • 由于您正在测试创建,因此您需要put 而不是patch。另外,你能试试put '/admin/{your-devise-model-name-plural}', admin: .....
  • 抱歉 - 删除了我的最后一条评论,在错误的文件夹中运行。
  • 感谢您写信@Mosaaleb!我输入了 put '/admin/admins', admin: {email: "abc@gmail.com", password: "secret", password_confirmation: "secret"} 我有一个参数错误未知关键字:admin。
  • 你能添加你的路由文件吗?
  • 是因为patch :create, admin: {email: 'xxx@gmail.com", password: "very-secret", password-confirmations: "very-secret"}吗? admin这里只是发送参数的关键

标签: ruby-on-rails testing devise


【解决方案1】:

post :create, params: {"admin"=>{"email"=>"abc@gmail.com", "password"=>"very-secret", "password_confirmation"=>"very-secret" }}

【讨论】:

    【解决方案2】:

    你可以试试

    post '/admins', params: admin_attributes

    如果您想在其他示例中再次重用 admin_attributes,可以使用 let 定义它。

    Rspec.describe RegistrationsController do
    let(:admin_attributes) { { admin: { email: 'xxx@gmail.com", password: "very-secret", password-confirmations: "very-secret" } } }
    
    

    【讨论】:

    • 我仍然遇到同样的错误。失败/错误:输入'/admins',{admin:“abc@gmail.com”,密码:“very-secret”,密码确认:“very-secret”}} ArgumentError:未知关键字:admin。
    • 正在使用 let,所以请稍等。目前正在使用它在错误消息中所说的内容。
    • 参数需要在{} 中作为哈希含义传递,我忘记了,我已经编辑了我的答案。
    • 我试过把'/admins',params: {{admin: {email: "abc@gmail.com", password: "very-secret", password_confirmation: "very_secret"}}} 我出现意外的语法错误 } 期待 =>
    • @flobacca,希望我能提供更多帮助。你应该是回答这个问题的人,并将其标记为正确;)
    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多