首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Factory.build和Factory.attributes_for有什么不同?

Factory.build和Factory.attributes_for有什么不同?
EN

Stack Overflow用户
提问于 2012-01-26 13:03:42
回答 1查看 2.9K关注 0票数 2

在rails 3.1.0应用程序的rspec测试中,我们同时使用了Factory.build和Factory.attributes_for。我们发现,如果我们将Factory.build更改为Factory.attributes_for,则有一种数据验证失败。此外,Factory.attributes_for没有对其进行正确的测试。我想知道这两者之间的区别,以及如何在rspec中使用它们。

在我们的模型测试中,我们使用Factory.build。在更新或新的控制器测试中,我们使用Factory.attributes_for。我们刚刚在控制器测试中发现了一个案例,Factory.attributes_for没有对其进行正确的测试,并且该案例没有通过Factory.build的模型验证。

非常感谢。

更新:以下是rfq模型中的rspec案例:

代码语言:javascript
复制
  it "should not have nil in report_language if need_report is true" do
    rfq = Factory.build(:rfq, :need_report => true, :report_language => nil)
    rfq.should_not be_valid
  end

以下是rfq控制器中的rspec用例:

代码语言:javascript
复制
it "should be successful for corp head" do
  session[:corp_head] = true
  session[:user_id] = 1
  s = Factory(:standard)
  rfq = Factory.attributes_for(:rfq, :need_report => true, :report_language => 'EN')
  rfq[:standard_ids] = [s.id] # attach standard_id's to mimic the POST'ed form data
  get 'create', :rfq => rfq
  response.should redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")  
end

由于验证失败,上面的控制器用例失败。控制器情况下的失败是由于在创建控制器rfqs时添加了以下行而导致的。

代码语言:javascript
复制
  @rfq.report_language = nil unless params[:need_report]

但是,rfq模型中的案例(见上面的rfq模型)已经成功通过。在模型测试中是.build,在控制器测试中是.attributes_for。

更新:

正确的说法应该是:

代码语言:javascript
复制
@rfq.report_language = nil unless params[:rfq][:need_report] == 'true'

代码语言:javascript
复制
@rfq.report_language = nil if params[:rfq][:need_report] == 'false'

params[:need_report]不返回任何内容,并且不是从参数中检索数据的正确方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-26 14:09:27

Factory.attributes_for只返回Factory. Factory.build使用这些相同资产的属性的散列,但返回设置了这些相同属性的类的实例。

代码语言:javascript
复制
Factory.build(:user)

在功能上等同于

代码语言:javascript
复制
User.new(Factory.attributes_for(:user))

但是你会发现它们是不可互换的。也许如果你发布一些代码,我们可以更好地解释你的测试中发生了什么。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9014147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档