Стабилизация динамических искателей ActiveRecord с помощью RSpec - PullRequest
3 голосов
/ 29 декабря 2011

Как я могу настроить следующие модели / спецификации для насмешек в моих спецификациях контроллера.

Вот модели

class User < ActiveRecord::Base
  has_many :favorites
end

class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :place
end

class Place < ActiveRecord::Base
  has_many :favorites, :as => :favorable
end

Затем в какой-то момент место будет проверено, чтобы увидеть, является ли оно в настоящее время любимым

@favorite = @current_user.favorites.find_by_place_id(@place.id)

Теперь я хочу высмеять пользователя для некоторых примеров

it "should be success" do
  user = double("User")
  user.stub(:favorites)
  get :show, :id => "1081651"
  response.should be_success
end

Но я получаю

undefined method `find_by_place_id' for nil:NilClass

Что я могу сделать: избранное, чтобы помочь ему пройти. Поскольку используется динамический искатель, я не уверен, как правильно его смоделировать.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

Использовать нулевую заглушку объекта, которая будет игнорировать все неожиданные сообщения:

user.stub(:favorites).and_return(double.as_null_object)

Другой способ - использовать stub_chain метод:

user.stub_chain(:favorites, :find_by_place_id)
1 голос
/ 29 декабря 2011
favorite = double('Favorite')
user.stub_chain(:favorites, :find_by_place_id) { favorite }
...