【问题标题】:how to POST nested attributes in RSpec integration testing?如何在 RSpec 集成测试中发布嵌套属性?
【发布时间】:2012-01-10 18:43:17
【问题描述】:

我正在编写 RSpec 集成测试,因为我将意大利面条代码转换为使用 accepts_nested_attributes_for。我有一个像这样的sn-p:

# 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-able 格式?

(相关但不太重要:post 方法在哪里记录或定义?我想看看它真正接受什么作为参数。)

【问题讨论】:

    标签: ruby-on-rails post rspec integration-testing nested-attributes


    【解决方案1】:

    改为post :create 尝试使用post "/wizard" 或将您的规范嵌套在describe WizardController do; end 块中。通常,只有在给定控制器的描述块内时,您才能使用 method :action 语法。

    【讨论】:

      【解决方案2】:

      我在尝试解决我尝试测试put 的问题时发现了这一点。我的post 方法虽然有效,所以如果您仍然需要它,也许我可以帮助您。我认为你的问题是你试图更新你的属性,就好像它是一个标量类型变量,但嵌套属性真的像一个数组。 Rails 通常将它们命名为“0”、“1”等,但我不确定这些名称是否重要,只要它们是唯一的。试试这个:

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

      (顺便说一句,我遇到的问题是我的update 规范失败了,因为它说像我的地址这样的东西并不是唯一的借用你的例子。)

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多