如何清理Capybara / Cucumber中的场景之间的状态?

时间:2013-09-05 07:33:30

标签: ruby cucumber capybara

我一直在阅读Capybara文档,虽然它是BDD的一个很好的工具,但我无法弄清楚如何在场景之间重置状态。

我已经看过一些对Before / After步骤的引用,但它们似乎适用于每个单独的步骤而不是场景。我无法在线找到关于此主题的任何权威文档。

注意:我不是一个红宝石开发人员,只涉及Capybara / Cucumber堆栈,所以我对ruby技术的接触是有限的,我可能会遗漏一些明显的东西。

2 个答案:

答案 0 :(得分:4)

我看过一些对前/后步骤的引用,但它们似乎适用于每个步骤而不是场景

事实并非如此。看看the documentation

在每个方案的第一步之前,将运行钩子。它们的运行顺序与它们的注册顺序相同。

挂钩将在每个方案的最后一步后运行,即使存在失败,未定义,待处理或跳过的步骤。

在清理状态时,像database_cleaner这样的第三方宝石可能会有所帮助。但是,再次,您可以在不依赖任何宝石的情况下清洁状态,仅使用前后钩。

答案 1 :(得分:0)

关于州,我answered this other SO post about seeds。复制到此处,这会产生离散的场景测试:


如果您应该或不应该使用种子,有各种各样的想法。

我想知道每个离散场景是否有效,它们之间没有相互影响。这可能会使套件花费更长时间,但可以确保您的测试相信另一种情况不会引起连锁反应。因此,我选择使用种子。

我有support/seeds.rb内容:

Before do |scenario|
  load Rails.root.join('db/seeds.rb')
end

注意,您可能希望将其与以下内容结合使用:

begin
  # start off entire run with with a full truncation
  #  DatabaseCleaner.clean_with :truncation, {:except => %w[plans]}
  DatabaseCleaner.clean_with :truncation
  # continue with the :transaction strategy to be faster while running tests.
  DatabaseCleaner.strategy = :transaction
rescue NameError
  raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
end