我正在编写RSpec集成测试,因为我将意大利面条代码转换为使用accepts_nested_attributes_for
。我有一个这样的片段:
# 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格式的方法?
(相关但不太重要:记录或定义了post
方法在哪里?我想看看它真正接受的是什么参数。)
答案 0 :(得分:1)
而是post :create
尝试使用post "/wizard"
或在describe WizardController do; end
块内嵌套您的规范。通常,只有当您在给定控制器的描述块内时,才能使用method :action
语法。
答案 1 :(得分:0)
我试图通过尝试测试put
来解决我的问题时发现了这一点。我的post
方法虽然有效,但如果您仍然需要,我可以帮助您。我认为您的问题是您尝试更新属性,就好像它是一个标量类型变量,但嵌套属性实际上就像一个数组。 Rails通常将它们命名为“0”,“1”等,但我不确定名称是什么,只要它们是唯一的。试一试:
@premise_attributes = {
"0" => {"address"=>"600 Mellow Ave, Mellow Park, CA 94025, USA"}
}
(顺便说一句,我遇到的问题是我的update
规范失败了,因为它说我的地址并不是唯一借用你的例子的。)