2013-05-28 5 views
0

Я хотел бы установить наличие чего-то для «истины» для конкретного экземпляра, который я тестирую. В настоящее время он не существует, поэтому его наличие == false.Установить присутствие в true для тестирования RSpec

Вот код, который у меня есть. Надеюсь, кто-то может помочь.

в invitations_controller:

def join_request 
    invitation_options = {recipient_id: current_user.id, project_id: @project.id, recipient_email: current_user.email} 

    if ProjectInvitation.where(invitation_options).present? 
    flash[:notice] = "You already sent a request to join this project." 
    redirect_to :back 
    return 
    end 

в invitations_controller_spec:

describe "Send Join Request" do 
    before do 
    @invitation_options = {:recipient_id => @user.id, :project_id => @project.id, :recipient_email => '[email protected]'} 
    ProjectInvitation.where(@invitation_options).present? == true # This is what I'm stuck on. Pretty sure this doesn't work. 
    end 
    context "if you already sent a request" do 
    it "should tell you that you already sent a request" do 
     response.should have_text("You already sent a request to join this project.") 
    end 
    it "should redirect you to the previous page" do 
     response.should redirect_to(:back) 
    end 
    end 
end 

ответ

0

Вы можете легко заглушить метод 'where', но он закроет все ваши запросы для этой модели. Пример:

Profile.stub(:where) { "555" } 
Profile.where(:id => 5) #will return 555 
Profile.where(:name => 'Phil') #will return 555 

Но лучший способ заключается в использовании FactoryGirl для создания ProjectInvitation

0

рассмотреть извлекая этот запрос (ProjectInvitation.where(invitation_options).present?) к методу класса в ProjectInvitation и затем STUB его в тесте

+0

Спасибо за предложение. Однако означает ли это, что мне все еще нужно создавать все эти ценности? Невозможно ли просто установить присутствие этой записи в «true» для этого конкретного экземпляра? – blanckien

0

stub current_user. создайте проект с фабрикой, а затем просто создайте ProjectInvitation с атрибутами {recipient_id: current_user.id, project_id: @ project.id, recipient_email: current_user.email} в вашей спецификации.

+1

Спасибо. Изучая использование FactoryGirl для этого. – blanckien

Смежные вопросы