Rspec-rails: Melewati boolean true ke model dalam tes permintaan

Dibuat pada 4 Jan 2016  ·  6Komentar  ·  Sumber: rspec/rspec-rails

Versi rel: 4.1.10
Versi Rspec-rails: 3.0.2

Saya sedang menulis tes permintaan dan model memerlukan atribut menjadi boolean true , bukan string true .

Saat meneruskan parameter ini dari pengujian permintaan ( param[:attribute] = true ), model menerima: model.attribute = "true" . ( "true" sebagai string)

Saat meneruskan parameter dari tes pengontrol ( param[:attribute] = true ), model menerima: model.attribute = true . ( true sebagai boolean)

Bagaimana saya bisa meneruskan true sebagai boolean ke model dari tes permintaan?

Inti dari hal di atas:
https://Gist.github.com/a-leung/cc44372f1ae776726e89

Komentar yang paling membantu

Jika params boolean datang ke controller sebagai benar/salah dan bukan sebagai string, kemungkinan besar Anda meneruskannya sebagai JSON di dalam tubuh. Dalam hal ini, Anda harus melakukan ini:

post :update, params: { id: user.id, attribute: true }, as: :json

atau ini:

post :update, params: { id: user.id }, body: { attribute: true }.to_json, as: :json

untuk lulus mereka sebagai boolean dalam tes juga.

Semua 6 komentar

Apakah Anda mencoba model.attribute = (1 == 1)?

masalahnya bukan menugaskan model.attribute , tetapi dalam perbedaan antara params rspec yang diteruskan dari pengontrol ( params[:attribute] = true menghasilkan: model.attribute == true ) dan permintaan ( params[:attribute] = true menghasilkan model.attribute == 'true' ).

dengan parameter yang sama, pengujian pengontrol meneruskan boolean true ke model, sedangkan pengujian permintaan meneruskan string true ke model.

beri tahu saya jika ada yang tidak jelas, saya dapat membuat proyek Rails sederhana untuk didemonstrasikan.

Ini adalah masalah dalam bagaimana tes Rails berperilaku, pada kenyataannya params akan selalu berupa string, kecuali sebelumnya didekodekan oleh middleware, misalnya dalam kasus JSON yang mungkin menjadi alasan tes pengontrol memungkinkan Anda untuk meneruskan objek nyata ...

baiklah. terimakasih atas klarifikasinya.

Apakah ada cara untuk mendapatkan tes permintaan untuk menggunakan middleware yang sama dengan tes pengontrol?

Mereka sudah akan.

Jika params boolean datang ke controller sebagai benar/salah dan bukan sebagai string, kemungkinan besar Anda meneruskannya sebagai JSON di dalam tubuh. Dalam hal ini, Anda harus melakukan ini:

post :update, params: { id: user.id, attribute: true }, as: :json

atau ini:

post :update, params: { id: user.id }, body: { attribute: true }.to_json, as: :json

untuk lulus mereka sebagai boolean dalam tes juga.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat