0

我的模型中定义了以下搜索功能:

class CoffeeType < ActiveRecord::Base
  has_many :coffee_items

   def self.search(search)
    if search
      where('name LIKE ?', "%#{search}")
    else
      where(nil)
    end
  end 
end

并进行以下 RSpec 测试:

 describe "GET index with serach params" do
       it 'renders a list of Coffee Types' do
         get :index, {search: "Ame"}, valid_session
         assigns(:coffee_types).count.should eq(2)
       end
    end

这可能是微不足道的,在这里看不到更大的图景。

4

1 回答 1

-1

use_transactional_fixtures有关默认 rspec设置的说明,请参见此处:

https://www.relishapp.com/rspec/rspec-rails/docs/transactions

除非您更改了此配置,否则您的数据库在每个示例之后都会重置。因此,您需要在示例/示例组中实际设置初始状态。在您的情况下,这可能类似于:

describe "GET index with serach params" do
  before :each do
    # create two coffee_types that should be found by searching for "Ame" and
    # one that shouldn't
    2.times { FactoryGirl.create :coffee_type }
    FactoryGirl.create :coffee_type, name: "Espresso" 
  end  

  it 'renders a list of Coffee Types' do
    get :index, {search: "Ame"}, valid_session
    assigns(:coffee_types).count.should eq(2)
  end
end

编辑:呸!实际上,您的模型方法中的代码不正确。您在搜索词之前只有%通配符。将该行更改为:

where('name LIKE ?', "%#{search}%")

于 2013-09-11T19:27:13.570 回答