2015-07-10 221 views
0

我正在爲我的應用程序編寫請求規格,並且遇到多個請求的stubbing問題。RSpec stubbing只適用於第一次請求,不適用於後續請求

我的測試:

it "adding a text response element to the campaign" do 
    TextResponsesController.any_instance.stub(:current_user).and_return(@user) 

    get new_campaign_text_response_path(@campaign) 
    expect(response).to render_template(:new) 

    post "/campaigns/#{@campaign.id}/text_responses", { :text_response => {:name => "test", :campaign_id => @campaign.id, :keyword => @campaign.keyword, :message => "testing", :clip_id => Content::DEFAULT[1], :sender_name => "tester", :start_date => Time.now, :end_date => Time.now + 86400} } 
    expect(@campaign.components.first.class).to equal TextResponse 
end 

在這個例子中,我捻熄:CURRENT_USER方法在控制器的任何實例,因此它可以模擬登錄的用戶,否則就只是重定向到登錄頁面。

問題是,通過在每次請求後輸出響應主體,我發現第一個獲取請求已成功完成,但發佈請求因爲重定向到登錄頁面而失敗。

我試過的東西:

1)評論取出請求。這允許發佈請求成功(不再重定向到登錄頁面)。

2)將兩個請求放在單獨的「it」塊中,並在每個塊中定義存根。沒有什麼區別,第一個請求有效,但第二個請求重定向。

我非常困惑,因爲當只有一個請求時存根顯然工作,但對於任何後續請求都失敗。我一整天都在試圖解決這個問題,並且我終於不知所措。

任何幫助將不勝感激。

+0

如果您在同一個塊中執行兩個'get'請求,它會失敗嗎? –

+0

是的,如果我做了兩個獲取請求,第二個獲得重定向。我在控制器中輸出了current_user,看起來第二個請求總是導致current_user爲零,這意味着stubbing不能正常工作......或者我不理解它是如何工作的?我輸出了正在調用current_user的類名,它是兩個請求的正確控制器。 –

回答

0

終於發現了這個問題。

在test.rb中,config.cache_classes被設置爲false(不知道爲什麼,因爲它默認爲true)。

您希望在測試環境中將config.cache_classes設置爲true,否則類將在每個請求中重新加載,並且其方法將覆蓋存根。

相關問題