我一直在阅读 Capybara 文档,虽然它是 BDD 的一个很好的工具,但我不知道如何在场景之间重置状态。
我已经看到了一些对之前/之后步骤的引用,但它们似乎适用于每个单独的步骤而不是场景。我无法在网上找到有关此主题的任何权威文档。
注意:我不是 ruby 开发人员,只涉足 Capybara/Cucumber 堆栈,所以我对 ruby 技术的了解有限,我可能会遗漏一些明显的东西。
我看过一些对之前/之后步骤的引用,但它们似乎适用于每个单独的步骤而不是场景
这不是真的。看看文档:
在每个场景的第一步之前都会运行之前的钩子。它们将按照注册时的相同顺序运行。
After hooks 将在每个场景的最后一步之后运行,即使存在失败、未定义、待处理或跳过的步骤。
在清理状态时,像database_cleaner这样的 3rd-party gem可能会有所帮助。但是,同样,您可以在不依赖任何 gem 的情况下清理状态,只使用 Before 和 After 钩子。
关于状态,我回答了另一个关于种子的 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