2016-07-24 5 views
6

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 

Antwort

6

Haben Sie versucht, mit nur einem Action :: Parameter Objekt als Wert Sie erwarten?

Wie in:

expect_any_instance_of(Hospital).to receive(:update).with(ActionController::Parameters.new('name':'MyString'))

+4

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