如何在纯Ruby(没有Rails)中使用Capybara?

Nea*_*sle 32 ruby testing tdd capybara

我试图让Capybara运行在一个简单的Ruby脚本中 - 即没有/在Rails之外.这是脚本:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'

include Capybara

Capybara.current_driver = :selenium
Capybara.app_host = 'http://www.google.com'

visit('/')
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行这个时,我收到此错误:

NameError: uninitialized constant Capybara::Session

at top level    in dsl.rb at line 52
method gem_original_require in custom_require.rb at line 36
method require  in custom_require.rb at line 36
at top level    in capybara_test.rb at line 3
method gem_original_require in custom_require.rb at line 31
method require  in custom_require.rb at line 31
at top level    in capybara_test.rb at line 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

更多信息:

  • Mac OS X 10.5
  • ruby 1.8.6(2009-06-08 patchlevel 369)[universal-darwin9.0]
  • 水豚(0.3.9)

谢谢!

尼尔

注意:根据jnicklas的评论我试过这个,它更接近地匹配新的README:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'

Capybara.default_driver = :selenium
Capybara.app_host = 'http://www.google.com'

module MyCapybaraTest
  include Capybara

  def test_google
    visit('/')
  end
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,我仍然看到同样的错误:

NameError: uninitialized constant Capybara::Session
Run Code Online (Sandbox Code Playgroud)

思考?

谢谢!

Pål*_*erg 29

这似乎对我有用:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'

Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'http://www.google.com'

module MyCapybaraTest
  class Test
    include Capybara::DSL
    def test_google
      visit('/')
    end
  end
end

t = MyCapybaraTest::Test.new
t.test_google
Run Code Online (Sandbox Code Playgroud)

  • 这是一个差不多4年的评论回复,但如果有任何谷歌的人也有困惑,"应该"(然后)和"期待"(现在的风格)是由`rspec-expectations`宝石提供的.安装完成后,您将能够满足诸如"expect(page).to have_content"foo"`的期望 (2认同)

jni*_*las 5

它表明,即使不正确的文档永远存在.Capybara README曾经建议将Capybara包含在全局命名空间中,这是一个非常糟糕的主意,并且会乱搞任意数量的随机事物.您应该在自己的模块或类中包含Capybara并使用它.

查看README以了解当前的最佳实践.