2010-07-07 7 views
2

я пытаюсь указать в моих тестах 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 
+0

дает больше кода как из теста, и контроллер может помочь. его неясно, как тест может проходить, если ожидание явно не выполняется. – Pete

ответ

0

Основываясь на мало вы сказали нам, я думаю, что вам нужно:

@profile.expects(:find).returns(@project) 
+0

Я обновил свой вопрос, используя больше кода, который я использую. – trobrock

+0

Это близко к тому, что мне нужно .... '@ profile.cardsets.expects (: find_by_id) .returns (@project)' – trobrock