1

也许我只是错过了树的森林再次,但我似乎无法找出一种方法来编写一个功能测试,测试一个:重定向到request.referer。Rails - redirect_to(request.referer)的功能测试

代码是:

def destroy 
    @step = Step.find(params[:id]) 
    @step.destroy 

    respond_to do |format| 
     format.html { redirect_to(request.referer) } 
     format.xml { head :ok } 
    end 
    end 

失败的测试是:

test "should destroy step" do 
    assert_difference('Step.count', -1) do 
     delete :destroy, :id => @step.to_param 
    end 
    assert_redirected_to request.referer 
    end 

有使用没有运气:

redirect_to(:back) 

...为好。

回答

4

明白了。

通过测试是:

test "should destroy step" do 
    assert_difference('Step.count', -1) do 
     @request.env['HTTP_REFERER'] = 'http://test.com/steps/1' 
     delete :destroy, :id => @step.to_param 
    end 
    assert_redirected_to @request.env['HTTP_REFERER'] 
    end 

感谢帮助来自:How do I set HTTP_REFERER when testing in Rails?

+0

仅仅是一条评论:某些浏览器不发送任何引用者,因此您最好有一个额外的解决方案 – apneadiving

+0

哦。这很好。谢谢。我想这里的答案是以不同的方式布局我的应用程序以简化导航。 –

0

你写一个集成测试和使用应当遵循重定向delete_via_redirect之一。您可能还需要设置HTTP_REFERER标头 - 请参阅guide.rubyonrails.org

+0

如果你在这里发布一些代码,这将有所帮助。 –