2016-07-24 9 views
6

Rails 5にアップグレードしていますが、私が必要とするデータを渡していてもRSpecが壊れています。Rails 5でRSpecでParamsハッシュを使用するには?

問題は明らかにここにある:

expected: ({"name"=>"MyString"}) 
got: (<ActionController::Parameters {"name"=>"MyString"} permitted: true>) 

私はそれが後者を期待するように私のコントローラのアサーションを修正できるようにする必要がありますを意味します。これは変更が必要な行です。

expect_any_instance_of(Hospital).to receive(:update).with({ "name" => "MyString" }) 
たぶん私はちょうど構文が何であるかを知らないこの

expect_any_instance_of(Hospital).to receive(:update).with(params: { "name" => "MyString" }, permitted: true) 

のようなものに

、およびRailsの5、または非存在のノートのためにどこにでも散らばっドキュメントでそれを見つけることができません/ on RailsのRSpecのに関するスタックオーバーフローに関する質問5.

フル・エラーとコントローラの仕様

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' 

コントローラスペックメソッド

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 

答えて

6

期待している値としてActionController :: Parametersオブジェクトを使用してみましたか?同様に

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

+4

非常Tyが、あなただけのそのようないくつかのパラメータを呼び出すことができわかりませんでした。ここでは、 'expect_any_instance_of(Hospital).to(ActionController :: Parameters.new( 'name': 'MyString'))を受け取る(:update) – user2792268

関連する問題