我正在为我的应用编写请求规范,我遇到了多个请求的存根问题。
我的测试:
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方法,因此它可以模拟登录用户,否则它只会重定向到登录页面。
问题是,通过在每次请求后输出响应正文,我发现第一个get请求成功完成,但是post请求失败,因为它被重定向到登录页面。
我尝试过的事情:
1)注释掉get请求。这允许发布请求成功(不再重定向到登录页面)。
2)将两个请求放在单独的“it”块中,并在每个块中定义存根。没有区别,首先请求有效但第二个请求被重定向。
我很困惑,因为当只有一个请求时,存根显然正在工作,但是对于任何后续请求都没有。我一直试图解决这个问题一整天,我终于不知所措。
非常感谢任何帮助。
答案 0 :(得分:0)
终于发现了问题。
在test.rb中,config.cache_classes设置为false(不知道为什么因为它默认为true)。
您希望在测试环境中将config.cache_classes设置为true,否则将在每个请求上重新加载类,并且其方法将覆盖存根。