Comment faire pour tester le rendu de statut: 404 avec Rails4 et RSpec lors de l'utilisation de rescue_from

J'ai un Rails4 application avec un "PagesController'.

Le show-méthode lève une Exception personnalisée 'PageNotFoundError" quand une Page n'est pas trouvée.

Sur le haut de la manette j'ai défini
rescue_from PageNotFoundError, with: :render_not_found

render not found est une méthode privée de PagesController et ressemble:

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

Les rails-journal de développement-le mode de montre:

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)

Donc, il les coutures de mon :statut => :not_found œuvres, jusqu'à présent.

Quand je fais curl -v http://0.0.0.0:3000/pages/readmef curl journaux

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

Mais le test suivant avec RSpec échoue:

 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

Tout semble parfait et même le test.journal dit 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)

J'ai essayé différents Serveurs, WebRICK, Mince, la licorne. Tout fonctionne comme prévu dans le développement et la production de la mode. Même le test.le journal est correcte, mais si le test échoue.

Quelqu'un peut-il me dire pourquoi le test dit de 200 au lieu de 404?

  • Vous enroulée pages/readme, pas pages/readmef. Et vous n'avez pas compris votre code de test.
  • rougir @sevenseacat votre droit, je ne vois pas le manque de f dans la boucle de commande. Et en effet curl fonctionne très bien et d'y répondre avec 404. _I devrait vraiment utiliser mes lunettes :/ Mais la spec ne fonctionne toujours pas. Je l'ai ajouté ci-dessus.
  • Merci pour votre commentaire. Il me conduit au vrai problème . J'ai formulé la question à nouveau.
  • Question similaire ici stackoverflow.com/questions/18034644/...
InformationsquelleAutor Nockenfell | 2013-08-02