【问题标题】:Rspec testing fail strong paramsRspec 测试失败强参数
【发布时间】:2017-11-15 00:53:08
【问题描述】:

试图让这个通过一段时间,对 Rspec 不太熟悉,尝试了几个答案,但还没有运气,我的控制器上需要这两个参数,如下所示:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_back fallback_location: new_user_path
    else
      render :new
    end
  end
private
  def user_params
    params.require(:user).permit(:username, :password)
  end
end

这是给我一个问题的 rspec 测试:

  describe "GET #create" do
    it "returns http success" do
      get :create
      expect(response).to have_http_status(:success)
    end
  end

这是我得到的错误:

1) UsersController GET #create returns http success
     Failure/Error: params.require(:user).permit(:username, :password)

     ActionController::ParameterMissing:
       param is missing or the value is empty: user

我现在正在查看 rspec 文档,但我们将不胜感激。

【问题讨论】:

  • 您的参数格式应为{ :user =&gt; { :username =&gt; "", :password =&gt; "" } }
  • 谢谢Nandu,我到底应该在哪里添加参数?是在get方法之后吗?

标签: ruby-on-rails ruby ruby-on-rails-3 rspec rspec-rails


【解决方案1】:

试试这个:

describe "POST #create" do
  it "returns http success" do
    post :create, params: { user: { username: "name", password: "password" } }
    expect(response).to have_http_status(:success)
  end
end

应该是post :create,而不是get :create

【讨论】:

  • 感谢 Chivorn,我现在遇到了一个不同的错误,但我认为这个解决方案有效。即使使用 get。
  • 哦,抱歉,我认为这不再相关,但在这里:
  • 1) UsersController GET #create 返回 http 成功失败/错误:expect(response).to have_http_status(:success) 期望响应具有成功状态代码 (2xx) 但它是 302 # 。 /spec/controllers/users_controller_spec.rb:15:in `block (3 levels) in '
  • @Lucky500 302 表示重定向found。这意味着您的代码运行良好,这也是您在创建 @user 后所做的控制器重定向。您可以将期望响应更改为expect(response).to have_http_status(:found)expect(response).to have_http_status(:created),看看它是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多