rspec (v 2.6.1) post :create
에서 전달 된 인수를 어떻게 조정합니까? 이 명령을 설명하는 rspec 문서를 가리키며이 명령을 사용하는 방법은 나에게 도움이 될 것입니다. 나는 보았지만 내 질문에 답하는 것을 찾을 수 없습니다.rspec POST에서 전달되는 해시 수정하기
고객을 위해 제대로 작동하려면 rspec을 작성하는 데 어려움이 있습니다. 고객 및 다른 사용자 개체 모두에 대해 매개 변수를받는 작업을 만듭니다. 좀 더 정확히 말하면, 나는 rspec 포스트에서 전달한 해시 값을 얻을 수 없다. 폼에서 생성 한 입력처럼 동작하도록 만든다.
내 Customer 및 User 객체는 별도의 ActiveRecord이며 각 Customer :는 사용자에게 속합니다. 여기
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
아무튼 ' t는 params[:user][:email]
에 끝나는 인수를 포함하므로 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
예, 그렇게 생각하고 두 개의 키는 "나란히"할 필요가 : 같은
params[:customer][:first_name]
또는params[:user][:email]
그리고 RSpec에 보인다. {: 고객 => {여러 가지 tassocations}, : 사용자 => {여러 가지 tassocations}}로 전달되는 해시가 필요합니다. 사용자가 내부 : 고객 (즉, params [: customer] [: user]) 인 경우 실패합니다. – LikeMaBell아니요, 동의합니다. 게시 : 생성 : 고객 => @customer_attr : 사용자 => admin.user 은 params [: customer] 및 params [: user]가있는 해시를 제공합니다. – TheDelChop
그래, 내 양식과 컨트롤러를 다시 코딩해야한다. params [: customer] 내부에 사용자 args가 중첩되어있다. 그렇게하면이 문제를 쉽게 해결할 수 있습니다 ... – LikeMaBell