【问题标题】:Ruby on Rails 4 fixtures require tableRuby on Rails 4 固定装置需要表格
【发布时间】:2016-04-30 02:28:42
【问题描述】:

使用 Rails 时的固定装置(我的环境 Rails 4.2)

为什么在运行测试时,当夹具存在但没有同名表时会出错?以及为什么夹具需要在表格中有匹配的列?

示例 1:(表不存在)

  • 创建一个fixture joes.yml(Joes 表不存在)
  • 运行 rake 测试:集成
  • 你会得到的错误是:

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: joes: DELETE FROM "joes"

示例 2:(表存在,但列不存在)

  • 创建一个夹具 products.yml。在这种情况下,表 Products 确实存在
  • 添加一个 yml 块,其名称是您在 products 表中没有的列的名称。示例在 products.yml 文件中添加一个条目 other: bla
  • 运行 rake 测试:集成

ActiveRecord::Fixture::FixtureError:表“products”没有名为“other”的列。

我认为我可以在测试中使用固定装置作为参考,但不需要匹配我的数据库。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 activerecord fixtures


    【解决方案1】:

    夹具是您的数据,它们仍然需要一个地方去!

    “夹具允许您在测试运行之前使用预定义的数据填充测试数据库。夹具是用 YAML 编写的独立于数据库的。每个模型有一个文件。”

    http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures

    它们不是测试数据库的某种内存替换,它们只是允许您使用值预先填充测试数据库,这样您就可以更方便地进行测试,而无需在设置时放入大量数据试运行。就是这样。

    【讨论】:

    • 如果我想测试创建用户。然后验证用户信息是否正确,有没有地方可以将这些信息放在硬编码之外的每个测试中?
    • 嗯 - 我个人使用 FactoryGirl 来处理 github.com/thoughtbot/factory_girl 之类的事情,但使用类似装置的东西,我会进行用户测试,这将创建一个 user1 - 很长的路要走,手动在测试,并在我的设备中创建一个单独的 user2,它可用于我的所有其他测试。
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2014-12-25
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多