Lebih
Bagaimana untuk memeriksa respon JSON menggunakan RSpec?
Saya punya kode berikut di controller:
format.json { render :json => {
:flashcard => @flashcard,
:lesson => @lesson,
:success => true
}
Saya RSpec controller test saya ingin memverifikasi bahwa skenario tertentu tidak menerima keberhasilan respon json jadi saya memiliki baris berikut:
controller.should_receive(:render).with(hash_including(:success => true))
Meskipun ketika saya menjalankan tes saya saya mendapatkan error berikut:
Failure/Error: controller.should_receive(:render).with(hash_including(:success => false))
(#<AnnoController:0x00000002de0560>).render(hash_including(:success=>false))
expected: 1 time
received: 0 times
Aku memeriksa respon yang salah?
142
11
Anda dapat memeriksa respon objek dan memverifikasi bahwa itu mengandung nilai yang diharapkan:
EDIT
Perubahan ini untuk
post
membuatnya sedikit lebih sulit. Berikut ini's cara untuk mengatasinya:Perhatikan bahwa
mock_model
tidak akan menanggapito_json
, jadistub_model
atau model nyata contoh yang dibutuhkan.Anda bisa mengurai respon tubuh seperti ini:
Kemudian anda dapat membuat anda terhadap pernyataan yang diuraikan konten.
Membangun off dari Kevin Trowbridge's jawaban
Ada's juga json_spec gem, yang layak lihat
https://github.com/collectiveidea/json_spec
Sederhana dan mudah cara untuk melakukan hal ini.
Anda juga dapat mendefinisikan fungsi helper dalam
spec/support/
dan menggunakan
json_body
setiap kali anda perlu untuk mengakses respon JSON.Misalnya, dalam permintaan spec anda dapat menggunakannya langsung
Pendekatan lain untuk menguji hanya untuk respon JSON (tidak bahwa konten yang hanya berisi sebuah nilai yang diharapkan), adalah untuk mengurai respon menggunakan ActiveSupport:
Jika respon tidak dapat diuraikan JSON exception akan dilempar dan tes akan gagal.
Anda bisa melihat ke
'Content-Type'
header untuk melihat bahwa itu adalah benar?Ketika menggunakan Rel 5 (saat ini masih dalam versi beta), ada's metode baru,
parsed_body
pada tes respon, yang akan mengembalikan respon diuraikan sebagai apa permintaan terakhir adalah dikodekan pada.Komit pada GitHub: https://github.com/rails/rails/commit/eee3534b
Jika anda ingin mengambil keuntungan dari hash diff Rspec menyediakan, itu lebih baik untuk mengurai tubuh dan membandingkan terhadap hash. Cara paling sederhana I've ditemukan:
Saya menemukan pelanggan matcher di sini: https://raw.github.com/gist/917903/92d7101f643e07896659f84609c117c4c279dfad/have_content_type.rb
Meletakkannya di spec/dukungan/pencocokan/have_content_type.rb dan pastikan untuk memuat barang-barang dari dukungan dengan sesuatu seperti ini di dalam kamu spec/spec_helper.rb
Berikut ini adalah kode itu sendiri, hanya dalam kasus itu menghilang dari link yang diberikan.