我正在阅读 Michael Hartl 的“Rails 教程”的新版本,由于我非常喜欢使用 Cucumber 进行 BDD,我发现自己很担心作者在这里指出的内容:http://ruby.railstutorial.org/chapters/sign-in-sign-out?version=3.2#sec:rspec_custom_matchers
简而言之,Cucumber 的主要麻烦在于不可能像这样 DRY 依赖于实现的测试:
Then /^he should see an error message$/ do
page.should have_selector('div.alert.alert-error', text: 'Invalid')
end
像这样编写 RSpec 自定义匹配器:
RSpec::Matchers.define :have_error_message do |message|
match do |page|
page.should have_selector('div.alert.alert-error', text: message)
end
end
因为这样的自定义匹配器必须放在 spec/support/utilities.rb 中,并且可以从 RSpec 集成测试中调用,但不能从 Cucumber 步骤定义中调用。
您是否积极/您对此有何看法?
谢谢你。
最佳答案
您当然可以创建 RSpec 匹配器并在您的 Cucumber 步骤中使用它们 - 我经常这样做。我只是把它们放在 features/support/matchers
它们可以立即用于我的步骤定义中。
如果您还想与 RSpec 测试共享它们,您可能希望将它们提取到单独的 shared_test
中。输入位置,然后你可以require
该文件夹位于您的 Cucumber env.rb 文件和 RSpec spec_helper.rb 文件中,然后它们将在两个测试框架中都可用。
关于ruby-on-rails - Cucumber 中的 RSpec 自定义匹配器到 DRY 依赖于实现的测试,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772940/