如何在Rspec 2中测试渲染:file =>'public/404.html'?

Cha*_*shu 10 testing rspec ruby-on-rails

我在一个动作中有以下代码:

render :file => 'public/404.html' and return
Run Code Online (Sandbox Code Playgroud)

这在浏览器中工作正常.我写了以下rspec示例来测试这个:

  it "renders 404" do
    get :new
    response.should render_template('public/404.html')
  end
Run Code Online (Sandbox Code Playgroud)

运行此示例会导致以下错误:

 Failure/Error: response.should render_template('public/404.html')
   Expected block to return true value.
Run Code Online (Sandbox Code Playgroud)

我也试过,response.should render_template(:file => 'public/404.html')但这也导致错误.

我该怎么测试呢?

Kam*_*arz 18

你应该使用:

response.should render_template(:file => "#{Rails.root}/public/404.html")
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用:render_template(:file =>"bogus file")通过. (6认同)

pho*_*oet 5

如果要显示404页面,请记住设置状态代码.这也是我要测试的:it { should respond_with :not_found }

而不是直接渲染public/404,有更好的方法来做到这一点.看看这个答案:如何在Rails中重定向到404?