我不能让水豚和rspec合作.这给了我一个错误:

undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>

我知道有很多关于这个的帖子,但没有一个解决方案对我有用.其中大多数涉及的规范不在/spec/features中,而我的规范在/spec/features中.

首先是错误:

$bundle exec rspec spec
F

Failures:

  1) security signs users in
     Failure/Error: visit "/sessions/new"
     NoMethodError:
       undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
     # ./spec/features/security_spec.rb:4:in `(root)'

 Finished in 0.006 seconds
 1 example, 1 failure

Failed examples:

rspec ./spec/features/security_spec.rb:3 # security signs users in

我认为重要的是要注意,一开始我使用的是URL助手"new_sessions_path",它一直给我一个错误undefined local variable or method 'new_sessions_path'.我知道它是有效的,因为:

$ rake routes
logout_sessions GET    /sessions/logout(.:format) sessions#logout
       sessions POST   /sessions(.:format)        sessions#create
   new_sessions GET    /sessions/new(.:format)    sessions#new
      contracts POST   /contracts(.:format)       contracts#create
  new_contracts GET    /contracts/new(.:format)   contracts#new
 edit_contracts GET    /contracts/edit(.:format)  contracts#edit
                GET    /contracts(.:format)       contracts#show
                PUT    /contracts(.:format)       contracts#update
                DELETE /contracts(.:format)       contracts#destroy
           root        /                          contracts#index

我的档案:

source 'https://rubygems.org'

gem 'rails', '3.2.11'
gem 'execjs'

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

gem 'jquery-rails'
gem 'activerecord-oracle_enhanced-adapter', '~> 1.4.1'
gem 'jruby-openssl'
gem 'therubyrhino'
gem 'kaminari'
gem 'nokogiri'

group :development do
  gem 'warbler'
end

group :test do
  gem 'rspec-rails'
  gem 'capybara'
  gem 'activerecord-jdbcsqlite3-adapter'
end

帮手.我的应用程序/规范中的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'

# Capybara integration
require 'capybara/rspec'
require 'capybara/rails'

# 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|
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  # config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
  # Include path helpers
  config.include Rails.application.routes.url_helpers
end

my_app/spec/features/security_spec.rb:

describe "security", :type => :feature do
  it "signs users in" do
    visit "/sessions/new"
    fill_in "username", :with => "user"
    fill_in "password", :with => "pass"
    click_button "Sign In"

    page.should have_content('Login Successful')
  end
end

我试过定义上面的测试,有:type => :feature和没有:type => :feature.这两种方式都没有区别.你知道我下一步该怎么做吗?

推荐答案

在我的功能顶部添加require 'rails_helper',最终解决了我的问题:

require 'rails_helper'

describe "security", :type => :feature do

  it "signs users in" do
    visit new_sessions_path
    fill_in "username", :with => "user"
    fill_in "password", :with => "pass"
    click_button "Sign In"

    page.should have_content('Login Successful')
  end
end

这对我来说似乎很奇怪,因为我看到的rspec和水豚的每个例子都没有这个要求,但哦,好吧.问题解决了.

Original Answer (older versions of rspec)

旧版本的RSpec使用require 'spec_helper'.更好的答案是require 'rails_helper'.

Ruby-on-rails相关问答推荐

ruby on rails:错误未知关键字::当使用google-cloud-storage下载文件时,soft_deleted

如何控制或定制S为模型使用的命名路由Rail()?

如何使用 Rails 语义记录器记录整个请求(标头、正文等)

使用嵌套属性时如何自动将父 ID 分配为外键?

组织和/或存储我一直在 RSpec 中使用的模拟对象的最佳方式是什么?

刺激不添加侦听器以搜索表单输入

Ruby on rails 查询不知道怎么写

Rails 4 中的 null_session 和 reset_session 有什么区别?

ruby on rails 和 javascript 之间的时间转换反之亦然?

Time.zone.now.to_date 是否等同于 Date.today?

搭建脚手架时建立关系

是否可以在 Rails 集成测试或规范中指定用户代理?

不带参数的 request.fullpath

在 ruby​​ on rails 上构建方法

Rails:从视图内渲染视图(不是部分视图)

在本地 Rails 开发环境中获取真实 IP 地址

Ruby 和 Ruby on Rails 离线 API 文档

如何更改 Rails 3 控制器中视图文件的默认路径?

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?

Rails.cache 在测试之间被清除了吗?