Search code examples
ruby-on-railsruby-on-rails-4minitest

Test strong parameters with minitest in Rails 4


I am new to Rails and I want to test my set strong parameters of the Book model with a controller test. I am using Minitest and Rails 4.

Book model:

class Book < ActiveRecord::Base
  validates :title, presence: true, length: { in: 1..150 }
end

Book controller wit params:

def create
  @book = Book.new book_params

  if @book.save
    redirect_to action: "index", notice: 'Success.'
  else
    render :new
  end
end

private
  def book_params
    params.require(:book).permit(:title, :cover_image)
  end

My idea for a test - does fail, because it creates an entry:

assert_no_difference('Book.count') do
  post :create, book: {
    id: 123,
    title: "Lorem ipsum"
  }
end

How can I get the tests go green and is it correct to test the strong parameters with a controller test?


Solution

  • Since Rails drops all unpermitted parameters not in permit, the new record will be created, hence the test will be red.

    Although, one can raise an exception with the action_on_unpermitted_parameters method when non-whitlisted parameters are submitted.