我一直在阅读Capybara文档,虽然它是BDD的一个很好的工具,但我无法弄清楚如何在场景之间重置状态。
我已经看过一些对Before / After步骤的引用,但它们似乎适用于每个单独的步骤而不是场景。我无法在线找到关于此主题的任何权威文档。
注意:我不是一个红宝石开发人员,只涉及Capybara / Cucumber堆栈,所以我对ruby技术的接触是有限的,我可能会遗漏一些明显的东西。
答案 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