使用RSpec在测试数据库中创建/重新创建迁移生成的记录

时间:2008-11-07 01:20:36

标签: ruby-on-rails ruby rspec

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

2 个答案:

答案 0 :(得分:6)

RSpec不是清除数据库,而是Rails的rake:db:prepare任务将dev数据库的 schema (但不是内容)复制到* _test db。

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

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

答案 1 :(得分:2)

我喜欢做的是在数据库db / migration中创建一个名为data的文件夹,然后在其中放置yml fixtures,在你的case categories.yml

然后我使用以下

创建迁移
def self.up
 down
 directory = File.join( File.dirname(__FILE__), "data" )
 Fixtures.create_fixtures( directory, "categories" )
end

def self.down
  Category.delete_all
end