使用Rails进行功能测试时在多个表中创建记录的问题

时间:2012-05-08 00:37:35

标签: ruby-on-rails ruby postgresql testing

我正在尝试在我的Rails 3.2.3项目中执行默认的功能测试。当我这样做时,我会多次出现以下错误:

|| test_should_create_food_item(FoodItemsControllerTest):                                                                                   
|| ActiveRecord::InvalidForeignKey: PG::Error: ERROR:  insert or update on table "food_items" violates foreign key constraint "food_items_us

我的food_item记录有一个外键,指向用户表中的用户ID。

我的理解是Rails使用每个测试方法调用在“test”数据库中创建和销毁测试数据。如果这是真的,那么这个错误是有意义的,因为在将记录插入到food_items表中时,users表将为空。

以下是我尝试解决此问题的方法。首先,我确保相关模型具有适当的has_many和belongs_to部分。

接下来,我将以下内容添加到food_items_controller_test.rb中的设置功能中:

setup
  do                                                                                                                                  
> @user = users(:one)                                                                                                                     
  @food_item = food_items(:one)                                                                                                           
end

我也尝试将@user调用添加到单个测试中,但它没有任何区别。

在我执行food_items_controller_test中的功能测试之前,我还能做些什么来创建用户记录吗?

此外,如果可能,我宁愿不关闭“测试”数据库中的数据库约束。

1 个答案:

答案 0 :(得分:1)

是的,rails seed可以在执行food_items_controller_test中的功能测试之前创建用户记录。