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

标签 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 会在每次测试方法调用时在“测试”数据库中创建和销毁测试数据。如果这是真的,那么这个错误是有道理的,因为当记录被插入到 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 中的功能测试之前,我还可以做些什么来创建用户记录吗?

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

最佳答案

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

关于ruby-on-rails - 使用 Rails 进行功能测试时在多个表中创建记录的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10491012/

相关文章:

iOS,rails,设计 : How to persist user login (session vs authentication_token)

ruby-on-rails - rails : methods that belongs_to and has_one associations create

javascript - 在用户选择查看全部之前限制向用户显示的评论数量的好方法是什么?

java - Spring @Transactional 防止开启事务

来自 psycopg2 PostgreSQL 查询的 Python 数组操作

ruby-on-rails - 如果 NOT nil 获取 ActiveRecords

ruby - 你如何在 ruby​​ 中发送原始 header

ruby - 实现数组并迭代

Ruby 从 html 中提取链接

sql - 如何检查两个节点之间是否存在路径 - SQL