1

我写的RSpec集成测试,将我的面条代码使用accepts_nested_attributes_for。我有这样一个片段:如何在RSpec集成测试中POST POST嵌套属性?

# file: spec/requests/wizard_spec.rb 
describe 'POST /wizard with address' do 
    before(:each) do 
    @premise_attributes = { 
     "address"=>"600 Mellow Ave, Mellow Park, CA 94025, USA", 
    } 
    end 
    it 'should succeed' do 
    post :create, "wizard" => { "premise_attributes" => @premise_attributes } 
    response.status.should be(200) 
    end 
end 

当然这失败:

Failure/Error: post :create, "wizard" => { "premise_attributes" => @premise_attributes } 
ArgumentError: 
    bad argument(expected URI object or URI string) 

是否有转换嵌套的属性散列成后能够格式的方法?

(相关,但同样重要的:?是post方法记录或定义,我想看看什么是真正接受作为参数)

回答

1

相反post :create尝试使用post "/wizard"或窝内的块describe WizardController do; end规格。通常,只有当您在给定控制器的描述块内时,才可以使用method :action语法。

0

,我发现这一点的同时试图解决我的问题,试图测试put。我的post方法的工作原理虽然如此,也许我可以帮助你,如果你仍然需要它。我认为你的问题是你试图更新你的属性,就好像它是一个标量类型变量,但嵌套属性真的像一个数组。 Rails通常将它们命名为“0”,“1”等,但我不确定这些名称只要它们是唯一的,它就不重要。这给一试:(顺便说一句,我遇到的问题是,我update规范是失败的,因为它说像我的地址是不是唯一的借你的例子)

@premise_attributes = { 
    "0" => {"address"=>"600 Mellow Ave, Mellow Park, CA 94025, USA"} 
}