Ruby on rails 为搜索控制器编写Rails集成测试

Ruby on rails 为搜索控制器编写Rails集成测试,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在测试我的应用程序。我有一个功能,你可以搜索注册会员的名字,姓氏,城市,州等。。。我认为集成测试比控制器测试更有效,但我很难弄清楚从哪里开始。以下是我的控制器的代码: class MsearchesController < ApplicationController def new @msearch = Msearch.new @first_name = User.uniq.pluck(:first_name) @last_name = User.uniq

我正在测试我的应用程序。我有一个功能,你可以搜索注册会员的名字,姓氏,城市,州等。。。我认为集成测试比控制器测试更有效,但我很难弄清楚从哪里开始。以下是我的控制器的代码:

class MsearchesController < ApplicationController

  def new
    @msearch = Msearch.new
    @first_name = User.uniq.pluck(:first_name)
    @last_name = User.uniq.pluck(:last_name)
    @state = User.uniq.pluck(:state)
    @cities = User.uniq.pluck(:city)
  end

  def create
    @msearch = Msearch.create(msearch_params)
    redirect_to @msearch
  end

  def show
    @users = User.all

    @msearch = Msearch.find(params[:id])
    @first_name = User.uniq.pluck(:first_name)
    @last_name = User.uniq.pluck(:last_name)
    @states = User.uniq.pluck(:state)
    @cities = User.uniq.pluck(:city)
  end

  def update
    @msearch = Msearch.new
  end

private 

  def msearch_params
     params.require(:msearch).permit(:first_name, :last_name, :state, :city, :agency)
  end

end
class msearchscontroller

如果您能帮助我开始学习,我们将不胜感激

我同意在验收级别比在控制器级别测试更好,因为在控制器测试中,没有任何东西可以真正证明它在做它应该做的事情。控制器将工作委托给业务对象和视图。您需要练习所有这些,以验证它是否正确地完成了工作。因此,控制器单元测试通常是冗余的

我将使用以下内容在验收级别测试此功能(假设您使用的是Capybara和FactoryGirl)


Msearch
类是否来自gem?还是你自己实施的?如果是您自己的类,您可能还希望在单元级别对其进行测试,这样您就可以在不占用整个堆栈开销的情况下执行更复杂的边缘情况。

感谢您的指导!
feature "User Search", type: :feature do

  scenario "search for user by first name" do
    @frodo = create(:user, first_name: "Frodo")
    @sam = create(:user, first_name: "Sam")

    visit new_msearch_path
    fill_in "user_first_name", with: "Frodo"
    click_button "Search"

    expect(page).to have_content "Frodo"
    expect(page).to_not have_content "Sam" 
  end

  # ... similar tests to cover each field / search case ...

end