2012-07-23 77 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 
} 

测试作为一个整体将是这样的:

​​
相关问题