Selenium RSpec/Capybara/JS测试单独通过,但在一起运行时失败
我的问题似乎非常类似:-但公认的答案是我已经在做的事情:我正在使用avdi的数据库清理器设置(我尝试过删除而不是像thoughtbot在他们的suspenders示例应用程序中使用的那样截断): 因此,此代码中的帐户记录:Selenium RSpec/Capybara/JS测试单独通过,但在一起运行时失败,selenium,rspec,capybara,capybara-webkit,database-cleaner,Selenium,Rspec,Capybara,Capybara Webkit,Database Cleaner,我的问题似乎非常类似:-但公认的答案是我已经在做的事情:我正在使用avdi的数据库清理器设置(我尝试过删除而不是像thoughtbot在他们的suspenders示例应用程序中使用的那样截断): 因此,此代码中的帐户记录: let(:account) { create(:account) } 似乎正在被删除。我正在访问一个找不到的页面,因为该帐户不存在。因此,在不同的数据库清理策略之间来回切换似乎是问题的根源 我可以直接运行rspec——只有失败和所有刚刚失败的测试才能通过。它只适用于功能部件
let(:account) { create(:account) }
似乎正在被删除。我正在访问一个找不到的页面,因为该帐户不存在。因此,在不同的数据库清理策略之间来回切换似乎是问题的根源
我可以直接运行rspec——只有失败和所有刚刚失败的测试才能通过。它只适用于功能部件/水豚规格
编辑:这是我的配置:
更新:以下是一些失败测试的示例:
更新2:它发生在我做了一个js:true测试之后。这些东西把我接下来的其他非js capybara测试搞砸了。我能够使用rspec——平分并确定罪魁祸首——它们是js capybara测试。在我运行JS测试之后,每个人似乎都推荐的数据库清理器切换策略是删除我在随后的非JS capybara测试中声明的帐户
这是一个解决方法:
很多教程和StackOverflow答案都有JS和非JS
测试混合在一起,策略在两者之间切换
每个测试上的事务和截断
根据我的经验,这导致了数据库访问竞争条件
导致编写良好的独立测试失败
断断续续地
我确定的解决方案是首先运行所有非JS测试
(洗牌),然后是所有JS测试(也洗牌)。这就允许
发现错误地预期某个状态或未能
自行清理(通过随机执行命令),
而不是尝试自由混合JS和非JS测试。像这样
不同类别的测试有不同的目的,我看不到
这种方法的缺点是
非标准
另一种方法是将数据库清理器配置更改为以下内容(摘自@ryanbigg的《rails多租户使用手册》):
这是较慢的,但我甚至不能说我的MacBookPro 16GB/SSD有多大的不同
感谢@tomwalpole为您提供的所有帮助,@因为推荐rspec--bisect而闻名,@ryanbigg为您编写了一本关于使用capybara测试多租户的好书,并提供了良好的工作代码示例,Stefan Magnuson为您撰写了这篇文章(我找不到一个这么合适的人)。使用“rspec with capybara示例”“来自数据库的配置”\u cleaner README--append\u after有助于修复一些错误。如果这不能解决问题,请发布您正在使用的任何其他RSpec配置,以及您得到的确切错误消息的示例,这似乎没有任何区别。我明天会把我的RSpec配置放在一个要点或其他什么的里…不能再保持清醒了。我添加了配置的要点。我们仍然需要确切的错误。我要做的下一件事是制作一个最小的规范(两个甚至一个RSpec示例)来重现问题,并查看test.log中的SQL以查看是否有任何内容正在删除帐户,如果有,是您的代码还是数据库。您能提供一个失败的测试示例吗?
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean_with(:truncation)
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
example.run
end
end