6

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

class MiniTest::Spec
  include Capybara::DSL
end

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

<main>': undefined methodmain: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

规范/接受/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
4

3 回答 3

2

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

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

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

于 2011-11-23T19:56:49.307 回答
0

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

https://gist.github.com/1607879

于 2012-01-17T05:11:15.153 回答
0

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

feature 'RewardTerms 功能', %q{
   为了获得对我可用的所有奖励条款
   作为 API 客户端
   我想列出所有有效的奖励条款
} 做

  背景做
    set_api_headers
  结尾

  情景“奖励期限指数”做
    访问'/reward_terms'
    #...
  结尾
结尾

特殊词“特征”是区分大小写的,可以是“浏览器”。您可以通过向以下内容添加一行来自定义它test_helper.rb

MiniTest::Spec.register_spec_type(/FooBar\z/i, Capybara::Rails::TestCase)
于 2013-07-18T01:27:52.877 回答