У меня есть контроллер под названием SolutionsController, действие индекса которого отличается в зависимости от значения params[:user_id]
. Если его nil, то он просто отображает все решения на моем сайте, но если он не равен нулю, тогда он отображает все решения для данного идентификатора пользователя.Тестирование области поиска в контроллере Rails с RSpec
Здесь:
def index
if(params[:user_id])
@solutions = @user.solutions.find(:all)
else
@solutions = Solution.find(:all)
end
end
и @user
определяется следующим образом:
private
def load_user
if(params[:user_id ])
@user = User.find(params[:user_id])
end
end
У меня есть тест RSpec, чтобы проверить действие индекса, если пользователь равен нулю:
describe "GET index" do
context "when user_id is nil" do
it "should find all of the solutions" do
Solution.should_receive(:find).with(:all).and_return(@solutions)
get :index
end
end
end
Однако, может кто-то сказать мне, как я пишу аналогичный тест для другой половины моего контроллера, когда t он идентификатор пользователя не ноль?
Что-то вроде:
describe "GET index" do
context "when user_id isn't nil" do
before(:each) do
@user = Factory.create(:user)
@solutions = 7.times{Factory.build(:solution, :user => @user)}
@user.stub!(:solutions).and_return(@solutions)
end
it "should find all of the solutions owned by a user" do
@user.should_receive(:solutions).and_return(@solutions)
get :index, :user_id => @user.id
end
end
end
Но это не работает. Кто-нибудь может мне помочь?