3

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

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

注意:我不是 ruby​​ 开发人员,只涉足 Capybara/Cucumber 堆栈,所以我对 ruby​​ 技术的了解有限,我可能会遗漏一些明显的东西。

4

2 回答 2

5

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

这不是真的。看看文档

在每个场景的第一步之前都会运行之前的钩子。它们将按照注册时的相同顺序运行。

After hooks 将在每个场景的最后一步之后运行,即使存在失败、未定义、待处理或跳过的步骤。

在清理状态时,像database_cleaner这样的 3rd-party gem可能会有所帮助。但是,同样,您可以在不依赖任何 gem 的情况下清理状态,只使用 Before 和 After 钩子。

于 2013-09-05T07:45:05.257 回答
0

关于状态,我回答了另一个关于种子的 SO 帖子。复制到这里,这会产生离散的场景测试:


关于是否应该或不应该为此使用种子有各种想法。

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

我有一个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
于 2013-11-15T14:48:08.007 回答