Capybara接受DSL与MiniTest :: Spec?

nee*_*zer 6 dsl minitest capybara ruby-on-rails-3

Capybara的自述文件(参见使用Capybara和MiniTest :: Spec)说我可以这样做,如果我正确地包含模块,但它没有提供任何说明性的例子如何...我试过包括像这样的模块:

class MiniTest::Spec
  include Capybara::DSL
end
Run Code Online (Sandbox Code Playgroud)

......无济于事 我一直收到这个错误:

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

如何在注释掉的代码中编写它?


规格/接受/ 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
Run Code Online (Sandbox Code Playgroud)

规格/接受/ 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
Run Code Online (Sandbox Code Playgroud)

Pat*_*tru 2

这篇文章中有一个很好的描述,介绍了如何使 MinitTest::Spec 与水豚一起运行。在那里,他基本上将 Capybara::DSL 包含到所有规范的基类中,如下所示

class RequestSpec < MiniTest::Spec
  include Rails.application.routes.url_helpers
  include Capybara::DSL
end
Run Code Online (Sandbox Code Playgroud)

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