我通过Cucumber使用Capybara来测试Rails应用程序。在黄瓜测试中调用@javascript之后丢失种子数据
Rails应用程序在DB/seeds.rb,其中规定了授权角色和默认用户帐户一些种子数据,我已经添加了一个test_seed.rake文件运行后rake db:test:prepare
种子测试数据库,因为rake db:seed
不会为测试数据库生成种子。
当我使用Capybara运行Cucumber功能时,这个种子数据是独立的,并且在测试每个功能时所做的任何更改都会回滚。但是,如果我尝试测试基于AJAX的功能,将@javascript
放在测试前面,Selenium将运行它,一旦测试完成,种子数据就会被擦除。这意味着随后的基于授权的测试将失败,直到rake db:test:prepare
再次运行,因为在创建用户帐户时无法找到role_id。
硒为什么这样做?更重要的是,我怎样才能阻止它?我知道我可以在每次测试之前使用Cucumber钩子加载数据,但是这些数据也需要在基于RSpec的单元测试之前加载,并且还需要加载到开发和生产数据库中。使用内置的种子机制似乎更加干燥。在任何情况下,数据库不应该回不同,只是因为硒得到调用轧)
编辑:!我使用database_cleaner与:transaction
策略。 的文档提到了database_cleaner,但似乎只是沿着与使用:truncation
的方式进行交谈,以使其他所有工作与Capybara在调用外部浏览器时执行的操作相同。我没有尝试过那个页面上的补丁,因为我不喜欢“奇怪的失败” - 有没有更清晰的方式?我开始认为去除测试,只是目测AJAX的东西将是最快,最简单的方法...