2012-07-23 4 views
1

컨트롤러 중 하나에서 create 메소드를 테스트하는 기능 테스트를 만들려고합니다. 내 인생에서 왜 이것이 실패하고 있는지 알 수 없습니다. post 기능 테스트가 실패 함

1) Failure: 
test_should_create_order(OrdersControllerTest) [/Users/user/rails_work/depot/test/functional/orders_controller_test.rb:38]: 
"Order.count" didn't change by 1. 
<3> expected but was 
<2>. 

그래서, 필자는 확신이 내 함수 (Functionals) 테스트가 주문을 할 수 없음을 의미한다 : 나는 하나 개 실패, 제로 오류를 얻고있다. 여기 내 테스트입니다 :

setup do 
    @order = orders(:one) 
    end 

    test "should create order" do 
    assert_difference('Order.count') do 
     post :create, order: @order.attributes.slice(Order.accessible_attributes) 
    end 

    assert_redirected_to store_url 
    end 

내 주문기구 : 나는 내 기능 시험의 설정 방법을 변경하는 경우, 지금

def create 
    @order = Order.new(params[:order]) 
    @order.add_line_items_from_cart(current_cart) 

    respond_to do |format| 
     if @order.save 
     Cart.destroy(session[:cart_id]) 
     session[:cart_id] = nil 
     format.html { redirect_to store_url, notice: 'Thank you for your order' } 
     format.json { render json: @order, status: :created, location: @order } 
     else 
     @cart = current_cart 
     format.html { render action: "new" } 
     format.json { render json: @order.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

:

one: 
    name: Dave Thomas 
    address: MyText 
    email: [email protected] 
    pay_type: Check 

내 주문 번호는 컨트롤러를 만들 :

@order = Order.create(orders(:one)) 

대신 o F :

@order = orders(:one) 

실패는 사라지지만 나는 약 8 이러한 오류를 얻을 :

NoMethodError: undefined method `stringify_keys' for #<Order:0x007f8c62dbb960> 

누구도 날이 기능 테스트를 해결하는 데 도움 수 있다면, 내가 이상의 감사하겠습니다. 모든 입력을 환영합니다.

+0

어쩌면 권한 부여 실패하고 순서가 당신의 POST 과정에서 생성되지 않는? – jdoe

+0

자동 번역은 어떻게 확인하나요? 나는 그것을 봤지만 나는 그것을 발견 할 수 없다. – flyingarmadillo

+0

사용자가 로그인했는지 확인하기 위해 일부 before_filter를 만들었습니까? 어쩌면 당신의'create' 액션이 전혀 호출되지 않았을까요? – jdoe

답변

0

하단 :order 속성을 개별적으로 할당하십시오.

나는 (레일스에 처음 도입 된) '질량 할당'취약점에 익숙하지 않지만, here (Pragmatic Forums)은 그 때문에 특정 테스트에 어려움을 겪고있는 사람의 사례입니다.

주문의 각 속성을 개별적으로 철자 검사하십시오. 대신

post :create, order: @order.attributes.slice(Order.accessible_attributes) 

사용

post :create, order: { 
    address: @order.address, 
    email: @order.email, 
    name: @order.name, 
    pay_type: @order.pay_type 
} 

의 전체 시험이 될 것입니다 :

test "should create order" do 
    assert_difference('Order.count') do 
     post :create, order: { address: @order.address, email: @order.email, name: @order.name, pay_type: @order.pay_type } 
    end 

    assert_redirected_to store_path 
end 
관련 문제