ruby-on-rails - Cucumber 中的 RSpec 自定义匹配器到 DRY 依赖于实现的测试,这可能吗?

标签 ruby-on-rails rspec cucumber integration-testing bdd

我正在阅读 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/

相关文章:

ruby-on-rails - 我如何解决 "Missing host to link to! Please provide the :host parameter"? (返回率)

ruby-on-rails - VCR+rspec 元数据 : how to use inferred cassette name like use_vcr_cassette

cucumber - 回调重定向不保留 session

ffmpeg - Testcafe cucumber 记者视频录制

meteor - 黑猩猩和 meteor : method calls in tests without using Velocity

ruby-on-rails - best_in_place 在 Rails 4 中具有多对多关系

mysql - 此 Ruby on Rails 代码是否容易受到 SQL 注入(inject)攻击?

ruby-on-rails - Rails 中复杂的多对多关系

ruby-on-rails - Rspec 输出格式 : Documentation

ruby-on-rails - 使用渲染模板app/app/views在heroku上进行怪异的渲染