0

我正在尝试对我的控制器强参数进行一些测试,并按照文档到“T”。

我的controller

class FutureOutagesController < ApplicationController
  before_action :find_future_outage, only: [:show, :update, :destroy] 
  before_action :future_outage_params, only: [:create, :update, :destroy]

  def index 
    @future_outages = FutureOutage.all
  end

  def show
  end

  def create
    @future_outage = FutureOutage.new(future_outage_params)
  end

  def update
  end

  def destroy
  end

  private 

  def find_future_outage 
    @future_outage = FutureOutage.find(params[:id])
  end 

  def future_outage_params
    params.require(:future_outage).permit(:start_time, :end_time, :reason, :service_id)
  end
end

我的rsepc测试FactoryBotShouldaMatchers

require 'rails_helper'

RSpec.describe FutureOutagesController, type: :controller do
    let(:fo) { build :future_outage }

  context 'test params' do
    it do
      params = {
        future_outage: {
          start_time: fo.start_time,
          end_time: fo.end_time,
          reason: fo.reason,
          service_id: fo.service_id
        }
      } 
      should permit(:start_time, :end_time, :reason, :service_id).
      for(:create, params: params).on(:future_outage)
    end
  end

end

我得到错误:

Failures:

  1) FutureOutagesController test params is expected to (for POST #create) restrict parameters on :future_outage to :start_time, :end_time, :reason, and :service_id
     Failure/Error:
       should permit(:start_time, :end_time, :reason, :service_id).
       for(:create, params: params).on(:future_outage)

     ActionView::Template::Error:
       wrong number of arguments (given 2, expected 1)
     # ./spec/controllers/future_outages_controller_spec.rb:25:in `block (3 levels) in <top (required)>'
     # ------------------
     # --- Caused by: ---
     # ArgumentError:
     #   wrong number of arguments (given 2, expected 1)
     #   ./spec/controllers/future_outages_controller_spec.rb:25:in `block (3 levels) in <top (required)>'

我究竟做错了什么?

4

0 回答 0