我在Rails中进行了一次迁移,将一条记录插入数据库。类别模型依赖于此记录。由于RSpec在每个示例之前都会清除数据库,因此该记录会丢失,而且似乎永远不会创建,因为RSpec似乎不会从迁移中生成数据库。在数据库中创建/重新创建此记录的最佳方式是什么?它以前会使用(:all)吗?
这不是RSpec清除数据库,而是Rails的rake:db:prepare任务将开发数据库的模式(但不是内容)复制到*_test数据库中。
是的,您可以使用before(:all)
,因为事务围绕每个单独的示例进行包装,但一个简单的fixture文件也可以完成同样的工作。
(这个问题有一个更复杂的通用解决方案:转移到面向服务的体系结构,在那里,"dev"one_answers"test"服务将是完全独立的实例。然后,您可以将测试数据库配置指向测试服务中的开发数据库,禁用rake:db:prepare,并在重新生成测试服务时通过迁移构建测试服务on和数据转换。)
我喜欢做的是在db/migration中创建一个名为data的文件夹,然后将yml fixture放在那里,在您的情况下是categories.yml
然后我用下面的创建一个迁移
def self.up向下directory=File.join(File.dirname(__File__),"data")Fixtures.create_Fixtures(目录,"类别")终止def self.down类别删除_全部终止