首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rspec中,user.invoices.count显示为0,但它显示它有模型

在rspec中,user.invoices.count显示为0,但它显示它有模型
EN

Stack Overflow用户
提问于 2013-04-14 09:31:18
回答 1查看 177关注 0票数 1

我正在构建一个用户rspec测试。我有许多发票,我与用户关联。在控制台中,当我执行user.invoices时,它显示发票的散列。但是,当我执行user.invoices.count来获取该用户的发票数量时,结果显示为0。下面是我的代码:

代码语言:javascript
复制
  before(:each) do
    @user = FactoryGirl.build(:user)

    @invoice = FactoryGirl.build(:invoice)
    @invoice.issue_date = "2013-01-01"
    @user.invoices << @invoice

如果我在里面放一个调试器,它会显示count = 0。下面是输出:

代码语言:javascript
复制
(rdb:1) p user.invoices
[#<Invoice id: nil, user_id: 279, issue_date: "2013-01-01", due_date: nil, payment_term: "Net 15", discount: nil, created_at: nil, updated_at: nil, client_id: 140, client_invoice_id: 1, custom_message: nil, sent_to: nil, status: nil, public_id: "1234", grand_total: nil, user_name: nil, company_name: nil, custom_email_message: nil, address_line_one: nil, address_line_two: nil>, 
 #<Invoice id: nil, user_id: 281, issue_date: "2013-01-01", due_date: nil, payment_term: "Net 15", discount: nil, created_at: nil, updated_at: nil, client_id: 141, client_invoice_id: 1, custom_message: nil, sent_to: nil, status: nil, public_id: "1234", grand_total: nil, user_name: nil, company_name: nil, custom_email_message: nil, address_line_one: nil, address_line_two: nil>, 
 #<Invoice id: nil, user_id: 283, issue_date: "2012-01-01", due_date: nil, payment_term: "Net 15", discount: nil, created_at: nil, updated_at: nil, client_id: 142, client_invoice_id: 1, custom_message: nil, sent_to: nil, status: nil, public_id: "1234", grand_total: nil, user_name: nil, company_name: nil, custom_email_message: nil, address_line_one: nil, address_line_two: nil>, 
 #<Invoice id: nil, user_id: 285, issue_date: "2011-01-01", due_date: nil, payment_term: "Net 15", discount: nil, created_at: nil, updated_at: nil, client_id: 143, client_invoice_id: 1, custom_message: nil, sent_to: nil, status: nil, public_id: "1234", grand_total: nil, user_name: nil, company_name: nil, custom_email_message: nil, address_line_one: nil, address_line_two: nil>]
(rdb:1) p user.invoices.count
0

为什么count不能正常工作?这是我想要通过的测试:

代码语言:javascript
复制
 it "should return the correct count of all invoices in the specified year" do
   # there are two invoices in 2013
   user = @user
   user.count_of_invoices_by_year("2013", :total).should == 2
 end

count_of_invoices_by_year使用.count,但它不能正常工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-14 11:02:53

这是因为发送.count使用计数(*)查询数据库。因为您使用的是FactoryGirl.build,所以数据库中没有记录,所以它返回0。

另请参阅:http://rhnh.net/2007/09/26/counting-activerecord-associations-count-size-or-length,它解释了.size、.length和.count之间的区别。

编辑:下面是如何测试你的方法(这会将记录保存到数据库中,但在测试后它们将被销毁)

代码语言:javascript
复制
before(:each) do
  @user = FactoryGirl.create(:user)

  @invoice = FactoryGirl.create(:invoice)
  @invoice.issue_date = "2013-01-01"
  @invoice.save
  @user.invoices << @invoice
  @user.save
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15994813

复制
相关文章

相似问题

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