我正在尝试在我的 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 在每次调用测试方法时都会在“测试”数据库中创建和销毁测试数据。如果这是真的,那么这个错误是有道理的,因为当记录被插入到 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 中执行功能测试之前,我还能做些什么来创建用户记录?
另外,如果可能的话,我宁愿不关闭“测试”数据库中的数据库约束。