Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用RSpec在测试数据库中创建/重新创建迁移生成的记录_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

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

Ruby on rails 使用RSpec在测试数据库中创建/重新创建迁移生成的记录,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我在Rails中进行了迁移,将记录插入数据库。类别模型依赖于此记录。由于RSpec在每个示例之前都会清除数据库,因此该记录会丢失,而且似乎永远不会创建,因为RSpec似乎不会从迁移中生成数据库。在数据库中创建/重新创建此记录的最佳方法是什么?它会在(:all)之前使用吗?不是RSpec清除数据库,而是Rails的rake:db:prepare任务将dev数据库的模式(而不是内容)复制到*\u测试数据库中 是的,您可以在(:all)之前使用,因为事务围绕每个单独的示例进行包装,但是一个简单的fix

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

不是RSpec清除数据库,而是Rails的rake:db:prepare任务将dev数据库的模式(而不是内容)复制到*\u测试数据库中

是的,您可以在(:all)之前使用
,因为事务围绕每个单独的示例进行包装,但是一个简单的fixture文件也可以完成相同的工作


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

我想做的是在db/migration中创建一个名为data的文件夹,然后将yml fixture放在其中,在您的案例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 自我介绍 向下 directory=File.join(File.dirname(\uuuuu File\uuuuu),“data”) 装置。创建装置(目录,“类别”) 结束 def自动关闭 Category.delete_all 结束