Pengujian pengontrol RSpec - respons kosong. Tubuh

103

Saya terjebak dengan masalah saat menguji pengontrol saya dengan RSpec - panggilan response.body selalu mengembalikan string kosong. Di browser semuanya dirender dengan benar, dan tes fitur mentimun tampaknya melakukannya dengan benar, tetapi RSpec gagal setiap saat.

Harapan lain pada objek respon, seperti response.should render_template('index')lulus tanpa masalah.

Apakah ada di antara Anda yang pernah mengalami masalah ini sebelumnya? Mungkin tanggapan html dapat diperoleh dengan cara lain?

Sedangkan untuk versinya, Rails 2.1.0, RSpec 1.2.7.

Toms Mikoss
sumber

Jawaban:

194

Secara default, rspec-rails meretas Rails untuk mencegahnya benar-benar merender template tampilan. Anda sebaiknya hanya menguji perilaku tindakan Anda & memfilter pengujian pengontrol Anda, bukan hasil dari perenderan template - untuk itulah spesifikasi tampilan.

Namun, jika Anda ingin membuat spesifikasi pengontrol merender template seperti yang biasa dilakukan aplikasi, gunakan render_viewsdirektif:

describe YourController do
  render_views
  ...
end
mislav
sumber
2
Terima kasih, apa yang saya butuhkan.
Toms Mikoss
2
Saya telah bekerja dengan Rails selama bertahun-tahun dan sekarang saya akhirnya memahami perbedaan antara spesifikasi pengontrol dan permintaan. Terima kasih!
Brian Underwood
2

Ketika saya menangani masalah serupa (yang membawa saya ke pertanyaan ini), terpikir oleh saya bahwa ada cara berbeda untuk menguliti kucing yang sama. Dengan kata lain, daripada memeriksa teks isi, Anda mungkin dapat memeriksa konten flash.

response.body.should =~ /Invalid email or password/

mungkin merupakan cek yang setara dengan:

flash[:alert].should == "Invalid email or password"

Bagi saya yang terakhir tampaknya sedikit lebih fleksibel karena dapat berjalan dengan baik, tetapi mungkin tidak sesuai di semua kasus.

Bersulang,

John

John Lockwood
sumber
2

Secara default, konfigurasi RSpec-rails menonaktifkan rendering template untuk spesifikasi pengontrol

Salah satu cara untuk memperbaikinya adalah dengan memastikan untuk mengaktifkan render_viewspengaturan di rails_helper.rbfile Anda . Dengan cara ini, Anda membuatnya dapat berfungsi secara global di semua pengujian Anda.

RSpec.configure do |config|
  config.render_views
end

Atau gunakan deklarasi render_views sebagai grup individu:

describe User do
  render_views
end

Anda dapat membaca lebih lanjut tentang ini di sini .

Nesha Zoric
sumber