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