【问题标题】:RAILS 5: ActionController::ParameterMissing - Unable to get RSPEC to passRAILS 5:ActionController::ParameterMissing - 无法让 RSPEC 通过
【发布时间】:2020-06-22 18:13:27
【问题描述】:

由于我是 TDD 新手,我不确定如何通过测试。

在我的规范显示中,我对creates a waitinglist email 进行了以下失败测试:

Failure/Error: params.require(:waitinglist).permit(:email)
     
     ActionController::ParameterMissing:
       param is missing or the value is empty: waitinglist

waitinglist_params 在控制器中声明为params.require(:waitinglist).permit(:email) 时,我不确定如何让我的测试通过。我哪里错了?

waitinglists_controller.rb

class WaitinglistsController < ApplicationController
  before_action :set_waitinglist, only: [:show, :update, :destroy]  

  def create
    @waitinglist = Waitinglist.create!(waitinglist_params)
    render json: @waitinglist, status: :created
  end

  private
  def set_waitinglist
    @waitinglist = Waitinglist.find(params[:id])
  end

  def waitinglist_params
    params.require(:waitinglist).permit(:email)
  end
end

我有规格:

RSpec.describe 'Waitinglists API', type: :request do
  let!(:waitinglists) { create_list(:waitinglist, 10) }
  let!(:waitinglist_id) { waitinglists.first.id }


  #CRUD: Create - POST request [create]
  describe 'POST /waitinglists' do
    let(:valid_attributes) { { email: 'john.doe@example.com' } }

    context 'when the request is valid' do
      before { post '/waitinglists', params: valid_attributes }

      it 'creates a waitinglist email' do
        expect(json['email']).to eq('john.doe@example.com')
      end
    end
  end
end

【问题讨论】:

  • 你可以试试let(:valid_attributes) { { waitinglist: { email: 'john.doe@example.com' } } }
  • 非常感谢!

标签: ruby-on-rails rspec ruby-on-rails-5 tdd


【解决方案1】:

您必须使用密钥 waitinglist 将参数包装到哈希中,如下所示:

params: { waitinglist: { email: 'john.doe@example.com' } }

【讨论】:

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