3

我在 Rails 中有一个将记录插入数据库的迁移。类别模型取决于此记录。由于 RSpec 在每个示例之前都会清除数据库,因此该记录会丢失,而且似乎永远不会创建,因为 RSpec 似乎不会从迁移中生成数据库。在数据库中创建/重新创建此记录的最佳方法是什么?它会使用 before(:all) 吗?

4

2 回答 2

6

不是 RSpec 清除数据库,而是 Rails 的 rake:db:prepare 任务将您的开发数据库的模式(但不是内容)复制到您的 *_test 数据库中。

是的,您可以使用before(:all),因为事务是围绕每个单独的示例进行的 - 但是一个简单的夹具文件也可以完成相同的工作。

(这个问题有一个更复杂的通用解决方案:迁移到面向服务的架构,您的“开发”和“测试”服务将是完全独立的实例。然后您可以将您的测试数据库配置指向开发数据库您的测试服务,禁用 rake:db:prepare,并在重新生成时从迁移构建您的测试服务。然后您可以测试迁移和数据转换。)

于 2008-11-07T05:21:02.617 回答
2

我喜欢做的是在 db/migration 中创建一个名为 data 的文件夹,然后将 yml 固定装置放在那里,在您的情况下为 categories.yml

然后我使用以下内容创建迁移

def self.up
 向下
 目录 = File.join( File.dirname(__FILE__), "data" )
 Fixtures.create_fixtures(目录,“类别”)
结尾

def self.down
  类别.delete_all
结尾
于 2008-11-07T05:30:17.230 回答