2012-07-23 114 views
1

我想創建一個功能測試,測試我的控制器之一的創建方法。對於我的生活,我無法弄清楚爲什麼這是失敗的。我得到一個失敗,零個失誤:職位功能測試失敗

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>. 

所以,Im相當肯定,這意味着我的函試驗無法作出命令。下面是我的測試:

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 

我的訂單夾具:

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

和我的訂單號創建控制器:

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 

現在,如果我在我的功能測試更改的設置方法:

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

取而代之o F:

@order = orders(:one) 

故障消失,但我得到這些錯誤的約8:

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

如果有人可以幫助我解決這個功能測試,我會多欣賞它。任何和所有的投入是受歡迎的。

+0

也許你的授權失敗,您的帖子中不被創建的訂單? – jdoe 2012-07-23 06:46:19

+0

我將如何檢查自動化?我用Google搜索了一下,但我找不到它。 – flyingarmadillo 2012-07-23 08:59:27

+0

你做了一些'before_filter'來檢查用戶是否登錄?也許你的'create'行爲根本不被調用? – jdoe 2012-07-23 09:19:54

回答

0

底線:單獨指定各個order屬性。

我並不熟悉「批量分配」漏洞(Rails新增),但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 
} 

測試作爲一個整體將是這樣的:

​​
相關問題