Capybara Acceptance DSL с MiniTest::Spec?

В файле readme для Capybara (см. Использование Capybara с MiniTest::Spec) сказано, что я могу сделать это, если включу модуль правильно, но он не дает наглядных примеров того, как... Я пытался включить модуль следующим образом:

class MiniTest::Spec
  include Capybara::DSL
end

... но безрезультатно. Я продолжаю получать эту ошибку:

<main>': undefined methodfeature' для 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

person neezer    schedule 16.11.2011    source источник


Ответы (3)


В этом сообщении есть прекрасное описание того, как заставить MinitTest::Spec работать с капибарой. Там он в основном включает Capybara::DSL в базовый класс всех спецификаций, как в

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

это работает довольно хорошо в нашей настройке, но, конечно, не открывает повторно MiniTest::Spec.

person Patru    schedule 23.11.2011
comment
Да, я видел этот пост, но он позволяет вам использовать только сопоставители Capybara, а не BDD DSL для приемочного тестирования, что мне и нужно... - person neezer; 24.11.2011
comment
На ссылка часть о Capybara DSL содержится в разделе Использование Capybara с RSpec, там говорится Наконец, Capybara также поставляется со встроенным DSL для создания описательных приемочных тестов: Однако после представления DSL в действии он говорит: feature на самом деле просто псевдоним для describe ..., :type => :request, background это псевдоним для before, а scenario для it. Таким образом, вам не повезло, если вы хотите использовать его с MiniTest, поскольку это функция только для RSpec, но вы можете попытаться определить свои собственные псевдонимы. - person Patru; 05.01.2012
comment
Связанный пост в блоге был удален из Posterous, но вот он в интернет-архиве: http://web.archive.org/web/20130314201201/http://code-ningja.posterous.com/73460416 - person Ian Dickinson; 21.05.2013

Вот простая установка test_helper для запуска функциональных и интеграционных тестов в Rails с использованием синтаксиса спецификации. На основе tenderlove упомянутая выше статья о мини-тестировании с помощью Capybara, а также множество доработок и изучения исходного кода.

https://gist.github.com/1607879

person Seth Bro    schedule 17.01.2012

Вы должны добавить minitest-rails-capybara gem к Gemfile и добавить слово "feature" в конец описания следующим образом:

feature 'RewardTerms feature', %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

Специальное слово «функция» не учитывает регистр и может быть «браузером». Вы можете настроить его, добавив строку в test_helper.rb:

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