Ich habe eine Controller-Spezifikation für meine Anwendung, die die create-Methode auf einem Controller testet. Die Erstellungsaktion funktioniert zwar einwandfrei, aber die Spezifikation schlägt fehl. Es scheint, dass es den Hash-POST-Parameter automatisch in eine Zeichenfolge konvertiert.RSpec Controller Test Konvertieren von Hash in String
let(:coupon) { attributes_for(:coupon) }
describe 'POST #create' do
it 'should create a new coupon from params' do
expect {
post :create, :coupon => coupon
}.to change(Coupon, :count).by(1)
end
end
Wenn ich jetzt puts coupon
tun, ist es eine gültige Hash von Daten zu erzeugen, und der Typ ist Hash. Aus irgendeinem Grund erhält der Controller eine Zeichenfolge für params [: coupon]. Nur beim rspec-Test passiert das, wenn ich das Browsen mit einem POST-Formular durchführe, funktioniert das einwandfrei.
Rspec wirft die folgende Meldung:
NoMethodError:
undefined method `permit' for #<String:0x00000005062700>
Did you mean? print
und wenn ich puts params[:coupon].class
in der Steuerung in rspec tun gibt es mir String. Warum könnte es meinen Hash in eine Zeichenfolge für die POST-Anfrage konvertieren, und wie kann ich das verhindern?
Ich bin mit Rails 5.0.0 und 3.5.1 rspec
Leider hat dies nicht behoben, und ich habe bereits versucht, es mit verschiedenen JSON-Funktionen zu testen. Mein gesamter Gutschein-Hash wird in eine Zeichenfolge umgewandelt. In der Steuerung, wenn params.require (: coupon) verwendet wird, erhält es einen String und nicht einen Hash, so dass es nicht auf einen der Hash-Werte zugreifen kann. –