2012-04-01 10 views
27

Beim Testen einer JSON-Antwort von einem RSPEC-Controller-Test mit dem JBuilder von DHH ist mein response.body immer "{}". Es funktioniert gut in den Entwicklungs-/Produktionsmodi UND wenn ich die to_json Methode anstelle von jbuilder verwende, bekomme ich in meinem response.body den richtigen JSON.Warum gibt JBuilder beim Testen von RSPEC keinen Antworttext in JSON zurück

Jeder hat eine Ahnung, warum mein response.body beim Testen immer "{}" wäre.

----- Debugger

es "sollte den Warenkorb Artikel über JSON zurückgeben",: Fokus tun

get: Index: format =>: json
Ende

(RDB: 1) response.body

"{}"

Antwort

55

Für alle, die das gleiche Problem wird mit. Ich habe es herausgefunden.

Sie müssen render_views innerhalb der Controller-Tests, die Sie tun, aufrufen. Wenn Sie das tun, sollten Sie dann ein response.body mit JSON sehen enthalten :)

+0

Sie müssen 'render_views' aufrufen, da das Rendering beim Ausführen von Controllern standardmäßig deaktiviert ist. Dies beschleunigt den Testlauf, da Sie das Controller-Verhalten nur in einem Controller-Test testen sollten. –

+2

wie man 'render_views' verwendet, Ref: https://www.relishapp.com/rspec/rspec-rails/v/3-5/docs/controller-specs/render-views –

+0

https://github.com/ rspec/rspec-rails > Hinweis: Um mehr isolierte Tests zu unterstützen, werden Ansichten in den Controller-Spezifikationen nicht standardmäßig gerendert. Wenn Sie die diskrete Ansichtslogik überprüfen, verwenden Sie eine Ansichtsspezifikation. Wenn Sie das Verhalten eines Controllers überprüfen und zusammen anzeigen, berücksichtigen Sie eine Anforderungsspezifikation. Sie können 'render_views' verwenden, wenn Sie die gerenderten Ansichtsinhalte in einer Controller-Spezifikation überprüfen müssen, dies wird jedoch nicht empfohlen. –

25

Sie eine Lösung von https://github.com/rails/jbuilder/issues/32

So in rspec/spec_helper.rb

RSpec.configure do |config| 
    # https://github.com/rails/jbuilder/issues/32 
    config.render_views = true 
end 

Nach oben Option finden konnten, sind hinzugefügt, das JSON-Ergebnis wird über den JBuilder-Renderer angezeigt