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

如果你在這裏發佈一些代碼,這將有所幫助。 –