【问题标题】:Mysql2 error while using RSpec fixtures使用 RSpec 夹具时出现 Mysql2 错误
【发布时间】:2015-09-26 16:16:02
【问题描述】:

我已向 orderorder_items 固定装置(已经存在)添加了依赖项,但每次运行 rspec 工作人员测试时都会收到以下错误。

ActiveRecord::StatementInvalid:
       Mysql2::Error: Table 'inventory_test10.order_packages' doesn't exist: SHOW FULL FIELDS FROM `order_packages` /*controller:,action:,line:*/

我有一个order,其中有很多order_items 和很多order_packagesorder_items 也属于order_packages。因此,我能够做到:

order.order_items.each do |oi|
  put oi.order_package.status
end

最初的问题是没有为 nil 类识别状态,因为从未创建过 order_packages.yml 固定装置。我已经尝试了几个 rake 任务,但我对固定装置、迁移、rake 任务等并不是非常熟悉,而且我不确定我是否不小心导致了运行多个任务的错误。下面是来自博客的 sn-p,它警告多次运行该命令 - http://brandonhilkert.com/blog/using-rails-fixtures-to-seed-a-database/

rake db:fixtures:load FIXTURES=credit_card_types

一个警告,如果我们多次运行这个命令,它会播种 表多次。它不是幂等的。

我运行的其他任务:

  • FIXTURES=订单; rake db:fixtures:load
  • rake db:fixtures:dump(不起作用 - 错误)
  • rake db:fixtures:drop(不起作用 - 错误)

提前感谢您的任何建议!

【问题讨论】:

  • 你在测试环境中运行迁移了吗?
  • 我做到了。然后我进入了 test rails 控制台,根本没有找到任何种子数据。

标签: ruby-on-rails testing rspec fixtures rake-task


【解决方案1】:

您的测试框架应在测试运行开始时自动加载夹具,并在测试运行结束时将其删除。您不需要自己加载固定装置。

夹具将数据加载到表中;它们不会改变数据库结构。迁移可以通过创建/删除表、添加/删除列等来更改数据库。如果您遇到缺少表的问题,这很像迁移问题。

我建议查看 Guide to Testing Rails Applications 和(如果您使用 RSpec)rspec-rails documentation,它们更深入地解释了这些概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 2018-01-22
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多