1

我正在尝试测试“产品可以列出已对其进行过审核且不重复的用户”

这就是我的测试的样子

product_spec.rb

describe Product do

let!(:product) { Product.create } 
.
.#other test
.

  it "can list users that review it without duplicates" do
   product.reviews.create({user_id: 1, review: "test"})
  product.reviews.create({user_id: 1, review: "test2"})

   product.user.uniq.count.should eq(1)
  end
end

最终结果

1) Product can list users that review it without duplicates
 Failure/Error: product.reviews.create({user_id: 1, review: "test"})
 ActiveRecord::RecordNotSaved:
   You cannot call create unless the parent is saved
 # ./spec/models/product_spec.rb:49:in `block (2 levels) in <top (required)>'
4

2 回答 2

1

问题出在这一行:

product.save.reviews.create

保存返回布尔值是否对象已成功保存。你需要把它分成两行:

product.save
product.reviews.create
于 2013-09-11T12:56:11.430 回答
0

您正在尝试为尚未保存的产品创建评论:

product.reviews.create()

我猜product是无效的,因此它没有被保存

let!(:product) { Product.create } 

create如果失败,它只会返回无效对象。

你应该

  1. 用于create!确保您在保存对象失败时注意到(如果存在验证错误,它将引发异常)。
  2. 确保你Product可以用数据创建,你提供它。
于 2013-09-11T13:23:41.413 回答