如果传入查询,如何编写规范来测试搜索是否有效?

时间:2013-09-30 19:59:09

标签: ruby-on-rails rspec

嗨,我正在尝试编写一些Rspec测试并且稍微挣扎。

我有一个列出交易的索引页面,我创建了一个搜索框,让您按ID或用户名或用户电子邮件查找交易。

现在我正在尝试编写规范以确保在传入查询时搜索有效。这是控制器操作的相关部分:

def index
  @title = "Payments"

  if params[:query]
    @payments = Payment.text_search(params[:query])
  else

这是我尝试编写相关测试: (编辑搜索在浏览器中有效,但我正在尝试编写一些规范,而且只是对rspec很新,所以不确定正确的方法是什么。)

it "payments search works with a query" do
  user = FactoryGirl.create(:user, name: 'Space Cat', email: 'foo@bar.com')
  login_to_admin
  get :index, :query => 'space cat'
  response.status.should == 200
  response.body.should match(/foo@bar.com/)
  response.body.should include(user)
end

任何提示?

1 个答案:

答案 0 :(得分:3)

控制器规范应该只检查预期会发生什么:

let(:query) { 'space cat' }
let(:search_result) { double 'search_result', :paginate => [] }

before do
  login_to_admin
end

it "payments search works with a query" do
  Payment.should_receive(:text_search).with(query).and_return search_result
  get :index, :query => query
  expect(assigns(:payments)).to eq []
end

你的错误是:

  • 取决于具体实施:您必须在型号规范中指定Payment.text_search

  • 取决于视图:您不应该打扰如何在控制器规范中显示数据

  • 在db中创建无用的对象:由于你以前的依赖关系,你被迫在db中创建一个没有意义且耗时的用户