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

この構成を変更していない限り、データベースはすべての例の後でリセットされます。そのため、example/example グループで実際に初期状態を設定する必要があります。あなたの場合、次のようになります。

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 に答える