Como testar o status de renderização: 404 com Rails4 e RSpec ao usar rescue_from

Eu tenho um aplicativo Rails4 com um 'PagesController'.

O método show lança uma exceção personalizada 'PageNotFoundError' quando uma página não é encontrada.

No topo do controlador eu definirescue_from PageNotFoundError, with: :render_not_found

render not found é um método privado dePagesController e se parece com:

def render_not_found
  flash[:alert]=t(:page_does_not_exists, title: params[:id])
  @pages = Page.all
  render :index, status: :not_found #404
end

O log de trilhos no modo de desenvolvimento mostra:

Started GET "/pages/readmef" for 127.0.0.1 at 2013-08-02 23:11:35 +0200
Processing by PagesController#show as HTML
  Parameters: {"id"=>"readmef"}
  ..
  Completed 404 Not Found in 14ms (Views: 12.0ms)

Então, parece que o meu: status =>: trabalhos not_found, até agora.

Quando eu façocurl -v http://0.0.0.0:3000/pages/readmef enrolar

curl -v http://localhost:3000/pages/readmef
* About to connect() to localhost port 3000 (#0)
*   Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET /pages/readmef HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5
> Host: localhost:3000
> Accept: */*
>
< HTTP/1.1 404 Not Found
< X-Frame-Options: SAMEORIGIN

Mas o seguinte teste com o RSpec falha:

 it 'renders an error if page not found' do
    visit page_path('not_existing_page_321')
    expect(response.status).to eq(404)
    within( '.alert-error' ) do
      page.should have_content('Page not_existing_page_321 doesn\'t exist')
    end
  end

  1) PagesController renders an error if page not found
     Failure/Error: expect(response.status).to eq(404)

       expected: 404
            got: 200

Tudo parece bem e até mesmo o test.log diz 404

$ tail -f log/test.log
Started GET "/pages/not_existing_page_321" for 127.0.0.1 at 2013-08-03 09:48:13 +0200
Processing by PagesController#show as HTML
  Parameters: {"id"=>"not_existing_page_321"}
  Rendered pages/_page.haml (0.8ms)
  Rendered layouts/_navigation.haml (0.6ms)
  Rendered layouts/_messages.haml (0.2ms)
  Rendered layouts/_locales.haml (0.3ms)
  Rendered layouts/_footer.haml (0.6ms)
Completed 404 Not Found in 6ms (Views: 4.5ms)

Eu tentei servidores diferentes, WebRICK, fino, unicórnio. Tudo funciona como esperado no modo de desenvolvimento e produção. Mesmo o test.log está correto, mas o teste falha.

Alguém pode me dizer por que o teste diz 200 em vez de 404?

questionAnswers(3)

yourAnswerToTheQuestion