Failure/Error: click_button "Add Movie" ActionController::ParameterMissing: param is missing or the value is empty: movie

Failure/Error: click_button "Add Movie" ActionController::ParameterMissing: param is missing or the value is empty: movie

我一直在寻找其他答案,但我仍然收到缺少参数的错误。我猜这是一个回形针问题,但在搜索文档后,我找不到任何解决此问题的方法。

我的功能规范

scenario "An Admin creates a new movie" do 
      visit "/"
    click_link "Add New Movie"```

    fill_in "Title", with: "Creating first movie"
    fill_in "Synopsis", with: "Lorem Ipsum"
    fill_in "Year Released", with: "Date"
    click_button "Add Movie"

    expect(page).to have_content("Movie has been created")
    expect(page.current_path).to eq(root_path)
    expect(page).to have_content("Created by: #{@kyle.email}")```

end

我的电影模特

class Movie < ApplicationRecord
  has_many :comments
  belongs_to :admin

  validates :title, presence: true
  validates :synopsis, presence: true
  validates :year_released, presence: true

  has_attached_file :photo, styles: { medium: "300x200>", thumb: "100x100>" },         default_url: "/images/:style/missing.png"

validates_attachment_file_name :photo, matches: [/png\Z/, /jpe?g\Z/]```

我的控制器

def update
  if @movie.update(movie_params)
    flash[:success] = "Movie has been updated"
    redirect_to @movie
  else
    flash.now[:danger] = "Movie has not been updated"
    render :edit
  end
end

private

def movie_params
  params.require(:movie).permit(:title, :synopsis, :year_released, :photo)
end

我的_form.html.erb

<div class="form-group">
  <div class='control-label col-md-3'>
    <%= f.label :photo %>
  </div> 
  <div class='col-md-10'>
    <%= f.file_field :photo, class: "btn btn-primary btn-sl pull-left" %>
  </div>

<div class='form-group'>
<div class='col-md-offset-1 col-md-11'>
  <%= f.submit "Add Movie", class: "btn btn-primary btn-lg pull-right" %>
</div>

错误

 Failure/Error: click_button "Add Movie"
 ActionController::ParameterMissing:
 param is missing or the value is empty: movie```

如果需要,我的 Github

我认为那是因为您在 strong_params.

中使用了 require

我将您的代码更改为

def movie_params
  params.fetch(:movie, {}).permit(:title, :synopsis, :year_released, :photo)
end

并通过测试。

[retgoat@iMac-Roman ~/temp/moviesmoviesmovies]$ git:(development) rspec spec/features/creating_movies_spec.rb
DEPRECATION WARNING: use_transactional_fixtures= is deprecated and will  be removed from Rails 5.1 (use use_transactional_tests= instead). (called  from <top (required)> at   /Users/retgoat/temp/moviesmoviesmovies/spec/features/creating_movies_spec.rb:3)
..

Finished in 0.73751 seconds (files took 1.91 seconds to load)
2 examples, 0 failures

我也在浏览器中尝试过,一切都按预期进行——我看到了验证错误。

文档是 here

that post 也很有用。