使用RSpec灯具时出现Mysql2错误

时间:2015-07-08 16:06:29

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

我已经为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任务等等,而且我不确定我是否意外地导致错误运行多次。以下是博客的一个片段,警告多次运行该命令 - 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(没有工作 - 错误)

提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

您的测试框架应在测试运行开始时自动加载fixture,并在测试运行结束时删除它们。你自己不需要加载灯具。

夹具将数据加载到表中;它们不会改变数据库结构。迁移可以通过创建/删除表,添加/删除列等来更改数据库。如果遇到丢失表的问题,则非常类似于迁移问题。

我建议审核Guide to Testing Rails Applications和(如果您使用的是RSpec)rspec-rails documentation,它会更深入地解释这些概念。