我正在测试我的应用。我有一个功能,你可以通过名字,姓氏,城市,州等搜索注册会员...我认为集成测试比控制器测试更好,但我很难找到哪里去开始。这是我的控制器的代码:
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
非常感谢帮助我入门的任何帮助!
答案 0 :(得分:0)
我同意这在接受级别比控制器级别更好地测试,因为在控制器测试中你没有什么能够真正断言它会验证它做了它应该做的事情。 。 Controller将工作委托给业务对象和视图。您需要运用所有这些来验证它是否正确地完成了工作。由于这个原因,控制器单元测试通常是多余的。
我会使用类似下面的内容在接受级别测试此功能(假设您使用的是Capybara和FactoryGirl)。
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
来自宝石的Msearch
类?或者你自己实现了吗?如果它是您自己的类,您可能还希望在单元级别进行测试,这样您就可以在没有完整堆栈开销的情况下运行更复杂的边缘情况。