从现有的模型生成Rails fixtures有没有办法?

5
我有一个没有测试的Rails 2.x应用程序。我可以手动编写测试,但是否有一种自动生成固定装置的方法?不必手动输入所有内容会很好。
我可以再次运行script/generate来为所有模型生成固定装置,但是所有内容已经存在,如果我正确理解生成器,我仍然需要输入所有属性。
我考虑运行Rails控制台并执行例如...
>> y VendorUser.all.rand

这样可以给我一些带有所有属性的YAML,但它们会是无序的,并且仍然非常耗时。

有人能建议更有效的选项吗?

1个回答

5
这里有一个用于生成测试数据的Rake任务。
desc "extracting data for fixtures"
task :extract_fixtures => :environment do
  sql  = "SELECT * FROM %s"
  skip_tables = ["schema_info","schema_migrations"]
  ActiveRecord::Base.establish_connection
  (ActiveRecord::Base.connection.tables - skip_tables).each do |table_name|
    i = "000"
    File.open("#{RAILS_ROOT}/test/fixtures/#{table_name}.yml", 'w' ) do |file|
      data = ActiveRecord::Base.connection.select_all(sql % table_name)
      file.write data.inject({}) { |hash, record|
        hash["#{table_name}_#{i.succ!}"] = record
        hash
      }.to_yaml
    end
  end
end

4
我知道会有人说“不要使用 fixtures。”我就知道!我无法处理工厂。上次我试图使用它们时,我在这里花了几个小时来解决奇怪的问题,但从未得出解决方案。Fixtures 就像 HTML 表格:在道德和哲学上是错误的,但是它们是100%可靠的。谢谢。您的解决方案看起来很好。 - Ethan
@Ethan 在我看来,这两者之间总是有一个折衷的。它们并不是互斥的。理想情况下,我会编写我的项目,使其不依赖于特定的行,但偶尔使用一个固定装置可能是唯一的选择。尤其是在传统项目中。 - thekingoftruth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接