2

嗨,我正在尝试编写几个 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

有小费吗?

4

1 回答 1

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 中创建一个用户,这是没有意义且耗时的

于 2013-09-30T20:04:58.707 回答