【发布时间】:2011-11-06 01:17:45
【问题描述】:
如果我使用带有 selenium web 驱动程序的 cucumber/capybara 进行测试,是否需要在执行 cucumber 之前在单独的终端中打开 rails 服务器?
(目前我在服务器打开的情况下运行它,但我从 sqlite 收到“数据库已锁定”错误,我认为这是黄瓜和 webrick 冲突)
【问题讨论】:
标签: ruby-on-rails sqlite selenium cucumber capybara
如果我使用带有 selenium web 驱动程序的 cucumber/capybara 进行测试,是否需要在执行 cucumber 之前在单独的终端中打开 rails 服务器?
(目前我在服务器打开的情况下运行它,但我从 sqlite 收到“数据库已锁定”错误,我认为这是黄瓜和 webrick 冲突)
【问题讨论】:
标签: ruby-on-rails sqlite selenium cucumber capybara
您不需要活动的 Rails 服务器来运行 Cucumber 测试,并且拥有正在运行的服务器(Webrick、Mongrel 等)不会影响您的数据库,除非您使用相同的数据库进行测试和开发。测试套件启动他们自己的 rails 副本,并且应该使用“AppName-Test”(默认情况下)数据库进行测试。
数据库被锁定,这是在第一次测试时发生的,还是在稍后的测试中发生的?如果它稍后在测试中,那么当您进入下一个测试时,您可能有一个更大的数据库事务正在进行中。如果您认为是这种情况,请在第一次测试结束时抛出“sleep 30”以检查...给 DB 一些时间冷却。如果解决了问题,请在代码中查找运行异常长的数据库事务的任何内容。
增强测试的好方法是: https://github.com/bmabey/database_cleaner
它应该有助于终止任何数据库测试交互。希望这可以让您走上正确的道路。
【讨论】:
RAILS_ENV=test rake db:reset 我相信...(如果不是那个,请执行rake -T 以查看任务并找到一个执行重置的数据库 - db:drop 和db:setup 可能必须运行)。如果在测试数据库上重新启动不起作用,请在可视化测试中检查插入:启动 rails 服务器,在浏览器中执行测试,然后查看控制台显示的内容。也许你可以从中得到一个迹象。