ruby-on-rails - 从mysql导入夹具数据

无论如何在测试期间使用 mysqldump 而不是固定装置导入数据(在这种情况下为 rake test:profile)。

我未能成功导出 yml 格式的 mysql 数据(工作正常)并将其导入 rails(不起作用,rake 任务提示 yml 文件的格式,其完整性似乎完好无损)。

还有哪些日子可以使用或不使用固定装置导出/导入数据?

最佳答案

Mysqldump 是一个命令行程序,因此您必须编写一个 rake 作业来清除您的数据库。不过我同意 Mike B 的观点。 a railscast 中的“Fat Model, Skinny Controller”之类的一般建议是“Factories Not Fixtures”覆盖主题。工厂的优势在于,如果您愿意,它们可以在每次测试之间回滚数据库。 Fixture 也有不能很容易地表示关系的缺点,您必须手动创建和维护主键/外键。这有点痛苦。

如果我真的必须坚持使用固定装置,我就不会导入数据进行测试。测试您的数据库超出了您的应用程序的范围。如果你的应用程序真的依赖于那里的数据,那么把它放在 seeds.rb 中。但是应用程序数据不需要测试。例如,我真的不关心表 Users 中的内容,字段 first_name。如果我这样做了,我正在编写一个数据测试器?

此外,我希望您不要将生产数据转储到测试数据库中然后对其进行测试。这样做太过分了。

如果您仍想使用 mysqldump 和 fixtures,请编写 rake 任务或脚本来执行以下操作:

  • 首先,使用 mysqldump 转出您要使用的数据。
  • 将插入语句减少到每个表的几行。确保你在那里有一些关系!
  • 将这些行转换为固定文件或编写脚本来执行 mysql 命令,如下所示:
    • mysql -u dbuser --password=密码数据库名
  • 运行测试
  • 截断 few_rows_from_mysqldump.sql 中引用的表

这本质上就是 factory_girl 之类的事务功能所做的。请注意,您会稍微重新发明轮子。

夹具很好用,您只需手动创建 PK/FK。因此,我通常只测试几行。除此之外,还要测试超出范围的数据库层。如果您想确保数据具有一定的质量,请在您的模型中使用“validates_blah_blah”添加数据库约束。

希望我没有像 Mike B 所说的那样“做点别的事情”。我同意这很烦人。但我也想提出建议。

https://stackoverflow.com/questions/3947542/

相关文章:

bash - 使用转义序列呈现文本(如终端)

visual-studio-2010 - 如何将 const wchar_t* 转换为 wchar_

django-sessions - 在 Django 中,如何找到当前登录用户的所有其他事件 ses

python-3.x - 如何在 Panel (3D Blender 2.55) 中创建 UI "i

php - 在 XML 中使用 HMAC-SHA1 生成 SignatureValue

ruby-on-rails - 超时::Selenium/Capybara/Cucumber 出错

jpa - JPQL 中的复杂顺序

image-processing - 合并 povray 的任意大小的部分图像

.net - 通过 RDP 部署 .NET 应用程序

ruby-on-rails - 如何在 Rails 中访问父模型的实例变量?