【问题标题】:Capybara Acceptance DSL with MiniTest::Spec?Capybara Acceptance DSL with MiniTest::Spec?
【发布时间】:2011-11-16 04:36:12
【问题描述】:

Capybara 的自述文件(请参阅 Using Capybara with MiniTest::Spec)说,如果我正确地包含模块,我可以做到这一点,但它没有给出任何说明性示例来说明如何......我试过像这样包含模块:

class MiniTest::Spec
  include Capybara::DSL
end

... 无济于事。我不断收到此错误:

<main>': undefined methodfeature' for main:Object (NoMethodError)

我怎样才能让它像注释掉的代码那样工作?


spec/acceptance/api/reward_terms_spec.rb:

require "#{Dir.pwd}/spec/acceptance/acceptance_helper"

# this syntax works...

describe 'reward terms acceptance test' do
  include Capybara::DSL

  describe '#index' do
    specify {
      visit '/reward_terms'
      # ...
    }
  end
end

# this syntax doesn't work...

# feature 'RewardTerms', %q{
#   In order to get all reward terms available to me
#   As an API client
#   I want to list all active RewardTerms
# } do

#   background do
#     set_api_headers
#   end

#   scenario 'RewardTerm index' do
#     visit '/reward_terms'
#     ...
#   end
# end

spec/acceptance/acceptance_helper.rb:

ENV["RAILS_ENV"] = "test"
require "#{Dir.pwd}/config/environment"

require 'minitest/autorun'
require 'capybara/rails'

def set_api_headers(device_id = 'abcd1234')
  header 'Accept', 'application/json'
  header 'X-Device-Id', device_id
end

【问题讨论】:

    标签: ruby-on-rails-3 capybara dsl minitest


    【解决方案1】:

    this post 中有一个很好的描述,说明您应该如何让 MinitTest::Spec 与水豚一起运行。在那里,他基本上将 Capybara::DSL 包含在所有规范的基类中,如

    class RequestSpec < MiniTest::Spec
      include Rails.application.routes.url_helpers
      include Capybara::DSL
    end
    

    这在我们的设置中工作得相当好,但当然它不会重新打开 MiniTest::Spec。

    【讨论】:

    • 是的,我看到了那篇文章,但它只允许您使用 Capybara 匹配器,而不是 BDD DSL 进行验收测试,这就是我所追求的......
    • link 上,Capybara DSL 的部分包含在“将 Capybara 与 RSpec 一起使用”部分中,上面写着“最后,Capybara 还带有用于创建描述性验收测试的内置 DSL :"。然而,在实际演示 DSL 之后,它说:“feature 实际上只是 describe ..., :type =&gt; :request 的别名,backgroundbefore 的别名,scenarioit 的别名。”因此,如果您想将它与 MiniTest 一起使用,您会很不走运,因为它是 RSpec 独有的功能,但您可能会尝试定义自己的别名
    • 链接的博客文章已从 Posterous 中删除,但在 Internet 存档中:web.archive.org/web/20130314201201/http://…
    【解决方案2】:

    这是一个简单的 test_helper 装备,可以使用规范语法在 Rails 中运行功能和集成测试。基于tenderlovearticle mentioned above re: MiniTest with Capybara 的要点,以及大量的修补和源代码研究。

    https://gist.github.com/1607879

    【讨论】:

      【解决方案3】:

      您应该将minitest-rails-capybara gem 添加到Gemfile 并在描述的末尾添加一个单词“feature”,如下所示:

      feature 'RewardTerms 功能', %q{ 为了获得对我可用的所有奖励条款 作为 API 客户端 我想列出所有有效的奖励条款 } 做 背景做 set_api_headers 结尾 情景“奖励期限指数”做 访问'/reward_terms' #... 结尾 结尾

      特殊词“功能”是区分大小写的,可以是“浏览器”。您可以通过在test_helper.rb 中添加一行来自定义它:

      MiniTest::Spec.register_spec_type(/FooBar\z/i, Capybara::Rails::TestCase)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-16
        • 1970-01-01
        相关资源
        最近更新 更多