gpt4 book ai didi

ruby-on-rails - FactoryGirl 和 Rspec 测试中 attributes_for 的含义

转载 作者:行者123 更新时间:2023-12-03 08:36:39 25 4
gpt4 key购买 nike

浏览 Controller 测试教程,作者给出了一个测试 Controller Action 的 rspec 测试示例。我的问题是,他们为什么使用方法attributes_forbuild ?没有明确的解释为什么attributes_for除了它返回值的散列之外,还使用了它。

it "redirects to the home page upon save" do
post :create, contact: Factory.attributes_for(:contact)
response.should redirect_to root_url
end

教程链接在这里: http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html该示例位于开头主题部分 Controller testing basics

最佳答案

attributes_for将返回一个哈希值,而 build将返回一个非持久化对象。

鉴于以下工厂:

FactoryGirl.define do
factory :user do
name 'John Doe'
end
end

这是 build的结果:
FactoryGirl.build :user
=> #<User id: nil, name: "John Doe", created_at: nil, updated_at: nil>

以及 attributes_for 的结果
FactoryGirl.attributes_for :user
=> {:name=>"John Doe"}

我找 attributes_for对我的功能测试非常有帮助,因为我可以执行以下操作来创建用户:
post :create, user: FactoryGirl.attributes_for(:user)

使用时 build ,我们必须手动创建来自 user 的属性散列。实例并将其传递给 post方法,例如:
u = FactoryGirl.build :user
post :create, user: u.attributes # This is actually different as it includes all the attributes, in that case updated_at & created_at

我通常使用 build & create当我直接想要对象而不是属性哈希时

如果您需要更多详细信息,请告诉我

关于ruby-on-rails - FactoryGirl 和 Rspec 测试中 attributes_for 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com