2012-08-11 74 views
3

我收到以下错误,当我尝试运行一个RSpec测试:未定义的方法“参观”为#<Class:XYZ>(NoMethodError)的RSpec]

/srv/offerme/spec/requests/static_pages_spec.rb:13: undefined method `visit' for #<Class:0xb3436684> (NoMethodError) 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe' 
from /srv/offerme/spec/requests/static_pages_spec.rb:12 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/dsl.rb:18:in `describe' 
from /srv/offerme/spec/requests/static_pages_spec.rb:3 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run' 
from /var/lib/gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `autorun' 
from /usr/local/bin/rspec:19 

的文件在我看起来像这样得到这个错误(规格/请求/ static_pages_spec.rb):

require 'spec_helper' 

describe "StaticPages" do 
include Capybara::DSL 
    describe "GET /static_pages" do 
    it "works! (now write some real specs)" do 
     # Run the generator again with the --webrat flag if you want to use webrat methods/matchers 
     get static_pages_index_path 
     response.status.should be(200) 
    end 
    end 
    describe "Home page" do 
    visit 'static_pages/home' 
    page.should have_content('OfferMe') 
    end 

end 

我spec_helper.rb文件看起来像这样:

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/rspec' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    # ## Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = "random" 
    config.include Capybara::DSL 
end 
module ::RSpec::Core 
class ExampleGroup 
include Capybara::DSL 
include Capybara::RSpecMatchers 
end 
end 

最后,我的Gemfile看起来像这样:

source 'https://rubygems.org' 

gem 'rails', '3.2.7' 

# Bundle edge Rails instead: 
# gem 'rails', :git => 'git://github.com/rails/rails.git' 

group :development, :test do 
    gem 'sqlite3' 
    gem 'rspec-rails' 
end 

group :test do 
    gem 'capybara' 
end 

gem 'json' 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.2.4' 
    gem 'coffee-rails', '~> 3.2.2' 

    # See https://github.com/sstephenson/execjs#readme for more supported runtimes 
    # gem 'therubyracer', :platforms => :ruby 

    gem 'uglifier', '>= 1.0.3' 
    gem 'twitter-bootstrap-rails' 
end 

gem 'jquery-rails' 

# To use ActiveModel has_secure_password 
# gem 'bcrypt-ruby', '~> 3.0.0' 

# To use Jbuilder templates for JSON 
# gem 'jbuilder' 

# Use unicorn as the app server 
# gem 'unicorn' 

# Deploy with Capistrano 
# gem 'capistrano' 

# To use debugger 
# gem 'ruby-debug' 

gem 'therubyracer', '0.10.1' 
gem 'libv8' 
gem 'webrat' 

我已经看到了这GitHub的issue,并尝试了一些解决方法,以及看着有关类似问题的其他一些StackOverflow的问题(这就是为什么一些该代码看起来多余/哈克)。但是,他们都没有工作。请帮忙!

回答

6

UPDATE:

的问题是,我们在调用visit外的it块,在这里:

describe "Home page" do 
    visit 'static_pages/home' 
    page.should have_content('OfferMe') 
end 

总结这些中间线的it块:

describe "Home page" do 
    it "has a homepage" do 
    visit 'static_pages/home' 
    page.should have_content('OfferMe') 
    end 
end 

这应该工作。

原来的答案:

我可能是错的,但我相信你必须包括两个您的Gemfile的测试和开发的部分水豚。

试着改变你的Gemfile的那款这样的:

group :development, :test do 
    gem 'sqlite3' 
    gem 'rspec-rails' 
    gem 'capybara' 
end 
+0

没有工作:( – Ridwan 2012-08-11 02:50:16

+1

嗯......好吧,我注意到的另外一件事是你不需要'spec_helper.rb'中的'capybara/rails'。在[capybara github页面](https ://github.com/jnicklas/capybara/)它指定你应该有这个,如果你使用capybara作为一个rails项目,试着添加它并看看它是否有效 – 2012-08-11 02:57:27

+0

这也行不通。要求声明很重要吗? – Ridwan 2012-08-11 03:01:26

0

这是一个老帖子。我有同样的问题。我想我分享我的解决方案。 在我的Gemfile我有

group :test do 
    gem 'capybara' 
end 

而且visit是在正确的位置,但是我居然也得到了同样的错误。所以这就是我所做的。我在Gem上运行了更新,现在都很好。

bundle update capybara

希望这有助于别人。

相关问题