【问题标题】:Capybara & RSpec水豚 & RSpec
【发布时间】:2011-12-31 15:29:06
【问题描述】:

我无法让 Capybara 成功工作,它抱怨 has_text 是一个未定义的方法。

我创建了一个新的 rails 3.1 项目 (rails new test -T)。

宝石文件:

source 'http://rubygems.org'

gem 'rails', '3.1.3'

gem 'sqlite3'

group :assets do
  gem 'sass-rails',   '~> 3.1.5'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

group :test do
  gem 'rspec-rails'
  gem 'capybara'
end

我已经安装了规范文件夹:rails g rspec:install

spec/spec_helper.rb:

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.mock_with :rspec
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
end

最后是我的测试文件:

require 'spec_helper'

feature "the test" do
  scenario "GET /" do
    visit('/')
    page.should have_text('Welcome aboard')
  end
end

所以我启动了 rspec:bundle exec rspec spec/my_test.rb,这是错误:

F

Failures:

  1) the test GET /
     Failure/Error: page.should have_text('Welcome aboard')
     NoMethodError:
       undefined method `has_text?' for #<Capybara::Session>
     # ./spec/my_test.rb:6:in `block (2 levels) in <top (required)>'

【问题讨论】:

  • KL-7,你对我的问题有什么改变?我看到它和我写它时完全一样。事实上,我已经做了两个版本的差异,它们是相同的。
  • 别担心,没什么特别的。只是在第一句话中用反引号包裹了“has_text”,所以它变得更加引人注目。您可以在修订历史记录中看到它。
  • 好的。修订历史在哪里? (只是想知道,因为我还没有找到那个选项)。
  • FAQ
  • 哎哟!现在我明白了……谢谢! :)

标签: ruby-on-rails-3 capybara rspec-rails


【解决方案1】:

您很可能正在使用当前稳定版本的 capybara 1.1.2,但它没有 has_text? 方法。您可以改用 has_content?(和相应的 have_content 匹配器),也可以按照 Skydreamer 的建议直接从 github 存储库中使用 capybara。

请注意,has_content? 的行为与README 中的描述略有不同。另一方面,直接从存储库使用 gem 并不总是安全的,因为这个版本可能不是很稳定。

【讨论】:

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