dgm*_*ora 4 ruby rspec ruby-on-rails nested-attributes factory-bot
我正在使用 RSpec 和 Factory Girl 来测试我的应用程序。我正在尝试做的是以下内容:我有一个接受嵌套属性的对象,并且该嵌套属性无效。我想测试 POST 是否有效:
let(:valid_attributes) { build(:user).attributes }
it "creates a new User" do
expect {
post :create, {user: valid_attributes}, valid_session
}.to change(User, :count).by(1)
end
Run Code Online (Sandbox Code Playgroud)
那是工厂:
FactoryGirl.define do
factory :user do |x|
name "Homer"
after(:build) do
build :address
end
end
end
Run Code Online (Sandbox Code Playgroud)
问题是由 返回的散列build(:user).attributes没有address,尽管如果我检查由 创建的对象build(:user),address是正确构建的。
有什么方法可以轻松生成带有嵌套属性的散列?
回答自己以展示技术上可行的解决方案:
let(:valid_attributes) {attributes_for(:user, address_attributes: attributes_for(:address))}
Run Code Online (Sandbox Code Playgroud)
这有效,但我觉得它很笨重。在复杂的情况下,代码会变得非常冗长和丑陋。因为我希望有更好的东西,所以我不投票将此作为解决方案。