я пытаюсь указать в моих тестах RSpec, что мой контроллер должен использовать current_user.projects.find()
вместо Project.find()
Я использую Мокко насмешливый рамки и пытается что-то вроде этого:контроллер Force использовать CURRENT_USER насмешливо
controller.current_user.projects.expects(:find).returns(@project)
I уже издевались controller.stubs(:current_user).returns(@profile)
Этот тест проходит с этим, даже когда я использую реализацию Project.find()
. Как я могу проверить, что мой контроллер отключает правильный объект?
Edit (добавление дополнительного кода):
У меня есть проекты и задачи, проект имеет множество задач. Это метод шоу для отображения задачи в проекте, который принадлежит current_user
действий в контроллере:
def show
@project = current_user.projects.find_by_id(params[:cardset_id])
if @project.nil?
flash[:notice] = "That project doesn't exist. Try again."
redirect_to(projects_path)
else
@task = @project.tasks.find_by_id(params[:id])
end
end
Это тест, который не проверяет, что метод cardsets
был отменило current_user
объект.
Текущий Тест:
context "with get to show" do
context "with valid project" do
before(:each) do
@project = Factory(:project)
@task = Factory(:task)
@profile = @project.profile
ApplicationController.stubs(:require_user).returns(true)
controller.stubs(:current_user).returns(@profile)
Project.stubs(:find_by_id).returns(@project)
@project.tasks.stubs(:find_by_id).returns(@task)
get :show, :project_id => @project.id, :id => @task.id
end
it "should assign task" do
assigns[:task].should_not be_nil
end
it "should assign project" do
assigns[:project].should_not be_nil
end
end
context "with invalid project" do
before(:each) do
Project.stubs(:find_by_id).returns(nil)
get :show, :project_id => @project.id, :id => @task.id
end
it "should set flash" do
flash[:notice].should match(/doesn't exist/i)
end
it "should redirect" do
response.should redirect_to(cardsets_url)
end
end
end
дает больше кода как из теста, и контроллер может помочь. его неясно, как тест может проходить, если ожидание явно не выполняется. – Pete