rspec(v 2.6.1)post :create
で渡される引数を調整するにはどうすればよいですか?このコマンドについて説明しているrspecのドキュメントと、それを使用する方法を私に教えてもらうといいでしょう。私は見に行きましたが、私の質問に答えるものは何も見つかりません。rspec POSTで渡されるハッシュを変更する
お客様のために正しく動作するようにrspecを作成するのが難しいです:顧客と異なるUserオブジェクトの両方のパラメータを受け取るアクションを作成してください。より正確には、私はrspecポストで渡したハッシュの値を取得することができません:私のフォームから来る入力のように動作するように作成します。
私のCustomerとUserオブジェクトは、別々のActiveRecordsであり、各Customer:は、Userに属しています。ここで
describe CustomersController do
render_views
describe "for signed-in admins" do
before(:each) do
@customer_attr = Factory.attributes_for(:customer)
@admin = Factory(:admin)
test_sign_in(@admin.user)
end
describe "POST 'create'" do
describe "success" do
it "should create a customer" do
lambda do
post :create, :customer => @customer_attr # The problem is here
end.should change(Customer, :count).by(1)
end
end
end
end
end
失敗しています:
は、ここで私はそれを望むものをやっていない私のRSpecのだ明らかである(あなたは以下を参照してくださいますよう)
1) CustomersController for signed-in admins POST 'create' success should create a customer
Failure/Error: lambda do
count should have been changed by 1, but was changed by 0
# ./spec/controllers/customers_controller_spec.rb:323:in `block (5 levels) in <top (required)>'
問題そのpost :create, :customer => @customer_attr
doesnの」私はparams [:user]が空であるために@ user.saveが失敗していますが、ハッシュを再構成してその行に渡すすべての種類の方法を試みましたが、それを働かせてください。
はここで関連するコントローラのコードです:
def create
@user = User.new(params[:user])
@user.user_type = 'customer'
@customer = Customer.new(params[:customer])
if @user.save
@user.customer = @customer
if @customer.save
# create stuff
redirect_to customer_path, :flash => { :success => "Customer created." }
else
# failure stuff
end
else
# more failure stuff
end
end
ここでは、関連するフォームコードは(私はそれがしたいどのように動作する)です:
<%= form_for(@customer) do |f| %>
<%= fields_for :user do |user_form| %>
<%= user_form.label :email %>
<%= user_form.text_field :email %>
<% end %>
<%= f.label :first_name %>
<%= f.text_field :first_name %>
<%= f.label :last_name %>
<%= f.text_field :last_name %>
<%= f.submit "Create Customer Account" %>
<% end %>
最後に、ここに私の工場のコードは次のとおりです。
factory :user do |f|
f.sequence :email do |n|
"person#{n}@example.com"
end
f.password "thepassword"
f.password_confirmation "thepassword"
end
factory :customer do |f|
f.first_name "First"
f.last_name "Last"
f.user
after_build { |customer| customer.user.user_type = 'customer' }
end
はい、私はそう思う、と2つのキーが「横並び」にする必要があります。私は、{:customer => {#さまざまなtassocations}、:user => {さまざまなtassocations}}のように渡されるハッシュが必要です。 userが内部:顧客(つまり、params [:customer] [:user])の場合は失敗します。 – LikeMaBell
いいえ私は同意する、私は理解する。 post:create、:customer => @customer_attr、:user => admin.user はparams [:customer]とparams [:user]を持つハッシュを取得します。 – TheDelChop
さて、フォームとコントローラを探し直すだけで、params [:customer]の中にネストされたユーザーargsを再コーディングする必要があるようです。それはこの問題を解決するのが簡単になります... – LikeMaBell