Ich aktualisiere auf Rails 5, die meine RSpec unterbrochen haben, obwohl ich die Daten übergebe, die ich sein sollte.Wie erwartet ein Params-Hash in RSpec in Rails 5?
Das Problem ist offensichtlich hier:
expected: ({"name"=>"MyString"})
got: (<ActionController::Parameters {"name"=>"MyString"} permitted: true>)
Was bedeutet, ich muss in der Lage sein, meine Controller Behauptung zu beheben, so dass es Letzteres erwartet. Dies ist die Zeile, die geändert werden muss.
expect_any_instance_of(Hospital).to receive(:update).with({ "name" => "MyString" })
Wahrscheinlich so etwas wie diese
expect_any_instance_of(Hospital).to receive(:update).with(params: { "name" => "MyString" }, permitted: true)
Ich weiß nur nicht, was die Syntax ist, und kann es nicht/überall in der zerstreuten Dokumentation für Rails 5, oder nicht vorhanden Hinweise finden Stapelüberlauf Fragen zu RSpec on Rails 5.
Voll Fehler und Controller spec
2) HospitalsController PUT update with valid params updates the requested hospital
Failure/Error: if @hospital.update(hospital_params)
#<Hospital id: 43, name: "MyString", reference_code: "RefCod", image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil, contact_phone: "+61-000-000-000", website_link: "www.example.com", street_number: "01", street: "Somewhere St", suburb: "Suburb", state: "ACT", postcode: "1111", description: "MyText MyText MyText MyText MyText MyText MyText M...", areas_of_specialization: "MyText MyText MyText MyText MyText MyText MyText M...", created_at: "2016-07-24 22:28:24", updated_at: "2016-07-24 22:28:24"> received :update with unexpected arguments
expected: ({"name"=>"MyString"})
got: (<ActionController::Parameters {"name"=>"MyString"} permitted: true>)
Diff:
@@ -1,2 +1,2 @@
-[{"name"=>"MyString"}]
+[<ActionController::Parameters {"name"=>"MyString"} permitted: true>]
# ./app/controllers/hospitals_controller.rb:54:in `block in update'
Controller-Spezifikation Methode
describe "PUT update" do
describe "with valid params" do
it "updates the requested hospital" do
hospital = Hospital.create! valid_attributes
# Assuming there are no other hospitals in the database, this
# specifies that the Hospital created on the previous line
# receives the :update_attributes message with whatever params are
# submitted in the request.
expect_any_instance_of(Hospital).to receive(:update).with({ "name" => "MyString" })
put :update, {:id => hospital.to_param, :hospital => { "name" => "MyString" }}, valid_session
end
it "assigns the requested hospital as @hospital" do
hospital = Hospital.create! valid_attributes
put :update, {:id => hospital.to_param, :hospital => valid_attributes}, valid_session
expect(assigns(:hospital)).to eq(hospital)
end
it "redirects to the hospital" do
hospital = Hospital.create! valid_attributes
put :update, {:id => hospital.to_param, :hospital => valid_attributes}, valid_session
expect(response).to redirect_to(hospital)
end
end
...etc
Ty sehr viel, hatte keine Ahnung, dass du einfach so einige Parameter aufrufen könnte. Hier ist, was funktioniert hat, notieren Sie die Aufnahme der Genehmigung am Ende - 'expect_any_instance_of (Hospital) .zu empfangen (: update) .with (ActionController :: Parameters.new ('name': 'MyString'). Permit (: name))' – user2792268