我有一个模型,类似于前面讨论的多对多关系中讨论的Categories
模型。简单地说,我有许多库存类别(约200个类别),我想为所有用户加载。我想要has_and_belongs_to_many relationship
,这样我就可以很容易地找到那些拥有各种类别的用户,并计算每个类别的用户数量。如果用户删除了他们对某个类别的使用,我需要它对其他人可用,即使没有人使用它
我已经让它在控制台和开发模式下工作了,但它似乎不能在测试模式下工作,这让我觉得必须有更好的方法来做到这一点。
在db/seeds.rb
中,我有一个数组。。。
c = [ "Category 1", "Category 2", "Category 3", "Category 4" ]
c.each { |cat| Category.create!(category: cat)}
我知道测试模式中有一个问题,因为如果我包括。。。
$stdout.print Category.first.category
在一次测试中,我得到。。。
Error:
CategoryTest#test_should_be_valid:
NoMethodError: undefined method `category' for nil:NilClass
test/models/category_test.rb:17:in `block in <class:CategoryTest>'
或者,如果我这样做…
Category.create!(category: "Category 5")
$stdout.print Category.first.category
输出CCD_ 4。
关于初始化Category
对象的更好方法,以及如何在测试模式中看到它,有什么想法吗?
数据库种子不是为测试目的而设计的功能。
你可以使用测试夹具(轨道内置于一个)
https://guides.rubyonrails.org/testing.html
或factory_bot_rails在开始每个单元测试之前将测试数据填充到测试数据库中
https://github.com/thoughtbot/factory_bot_rails
如果你真的想通过种子来实现这一点,请尝试RAILS_ENV=test rake db:seed
(如果你不确定你的测试数据库是否处于上升状态,则尝试db:reset
)。
这可以让你处理一些数据,但这不是设置测试数据的好方法。我建议您查看一些在测试中设置数据的方法,或者查看Rails fixture的功能。