Ruby on rails 未定义的方法`访问';在rails中使用RSpec和Capybara时
我不能让水豚和rspec合作。它给了我这个错误:Ruby on rails 未定义的方法`访问';在rails中使用RSpec和Capybara时,ruby-on-rails,ruby,rspec,capybara,Ruby On Rails,Ruby,Rspec,Capybara,我不能让水豚和rspec合作。它给了我这个错误: undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil> 我的档案: 源代码'https://rubygems.org' gem“轨道”,“3.2.11” gem'execjs' 集团:资产做什么 gem'sass-rails',“~>3.2.3” gem“咖啡轨”,“~>3.2.1” gem'uglifie
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
我的档案:
源代码'https://rubygems.org'
gem“轨道”,“3.2.11”
gem'execjs'
集团:资产做什么
gem'sass-rails',“~>3.2.3”
gem“咖啡轨”,“~>3.2.1”
gem'uglifier','>=1.0.3'
结束
gem'jqueryrails'
gem'activerecord-oracle_增强型适配器',“~>1.4.1”
gem“jruby openssl”
宝石“therubyrhino”
宝石“卡米纳里”
宝石“nokogiri”
小组:发展怎么办
宝石“莺”
结束
组:测试do
gem'rspec rails'
宝石“水豚”
gem'activerecord-jdbcsqlite3-adapter'
结束
我的_应用程序/spec中的spec_helper.rb:
#运行“rails生成rspec:install”时,此文件将复制到spec/中
环境[“RAILS_ENV”]| |=“测试”
需要文件。展开\u路径(“../../config/environment”,\u文件\u)
需要“rspec/rails”
需要“rspec/自动运行”
#水豚积分
需要“水豚/rspec”
需要“水豚/铁轨”
#需要支持带有自定义匹配器和宏等的ruby文件,
#在spec/support/及其子目录中。
Dir[Rails.root.join(“spec/support/***.rb”)]。每个{f |都需要f}
RSpec.configure do | config|
#如果不使用ActiveRecord或ActiveRecord设备,请删除此行
#config.fixture_path=“#{::Rails.root}/spec/fixtures”
config.use\u transactional\u fixtures=true
config.expert\u base\u class\u for\u anonymous\u controllers=false
config.order=“随机”
#包括路径帮助程序
config.include Rails.application.routes.url\u helpers
结束
我的应用程序/spec/features/security\u spec.rb:
描述“安全性”,类型=>:featuredo
它“在”do“中为用户签名”
访问“/会话/新”
填写“用户名”:使用=>“用户”
填写“密码”:使用=>“通过”
单击按钮“登录”
第页应包含内容(“登录成功”)
结束
结束
我已经尝试过定义上面的测试,包括:type=>:feature
。这两种方式都没有区别。你知道我下一步应该尝试什么吗?尝试添加:
config.include Capybara::DSL
到您的配置块
# 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'
# 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
config.include Capybara::DSL
end
在我的功能顶部添加
require'rails\u helper'
,最终解决了我的问题:
require'rails\u helper'
描述“安全性”,类型=>:featuredo
它“在”do“中为用户签名”
访问新的\u会话\u路径
填写“用户名”:使用=>“用户”
填写“密码”:使用=>“通过”
单击按钮“登录”
第页应包含内容(“登录成功”)
结束
结束
这对我来说似乎很奇怪,因为我在rspec和水豚身上看到的每一个例子都没有这个要求,但是哦,好吧。问题解决了
原始答案(rspec的旧版本)
require'spec\u helper'
由旧版本的RSpec使用。更好的答案是需要“rails\u helper”
在块之前尝试在中执行所有设置:
spec/features/security\u spec.rb
describe "security" do
before do
visit "/sessions/new"
fill_in "username", :with => "user"
fill_in "password", :with => "pass"
click_button "Sign In"
end
it "signs users in" do
page.should have_content('Login Successful')
end
end
由于Capybara 2.0必须使用文件夹规范/功能,因此Capybara命令不再适用于文件夹规范/请求。我也遇到了这个问题
在我的功能顶部添加require'rails\u helper'最终解决了我的问题:
require 'rails_helper'
RSpec.describe "Products", type: :request do
describe "GET /products" do
it "display tasks" do
Product.create!(:name => "samsung")
visit products_path
page.should have_content("samsung")
#expect(response).to have_http_status(200)
end
end
end
并在rails\u helper.rb中添加'config.include Capybara::DSL'
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.include Capybara::DSL
end
不,完全相同的问题,没有明显的变化。这对我很有效——非常感谢。但在我的其他项目中,我不需要这样做。在什么情况下,一个项目需要这样做,而另一个项目则不需要这样做?还有,这到底是干什么的?对我来说也很有用。非常感谢你!我的文件中已经有了require'spec_helper',作为这个问题的答案进行了检查,但这对我来说很有效。谢谢这对我来说不起作用:我收到一条错误消息,Capybara
是一个未定义的常量。我的黄瓜测试使用水豚很好。这实际上是一个常见的错误原因。visit
功能仅在it
块中可用。不正确-在示例上下文中运行块之前的中的代码,因此访问将在那里以及it
块中工作。@user912563,最终,由于您解决了自己的问题,我的答案实际上更像是一个风格建议(在before
块中设置代码是我编写规范的方式,它们不会出错;-),所以我认为接受你自己的答案是公平的。谢谢@zettetic和@Paul Firavanti-我不知道之前的仍然在it
上下文中。使用此选项将使我的其他需要登录的测试变得更加干净。这对我很有帮助,因为我是一个noob,没有将测试包装在其中。。。结束。正如我的问题所述,我的水豚测试已经位于spec/features
下。但对于其他可能有问题的人来说,这是一个有效的观点。我发现创建目录mkdir spec/features
并创建一个符号链接ln-s spec/features spec/requests
很有帮助。这样,任何生成的测试都将被放置在features目录中。感谢@ThillaiNarayanan,这是我在一个较旧的安装指南之后遇到的问题,但是在一个较新的水豚版本中,你应该将更新部分放在文章的顶部。接受自己的答案确实是一种不好的方式,即使Kocur4d的答案更精确(忘记包含rails_helper.rb并不是更常见的问题)。您应该更改已接受的答案,因为在包含之前没有进行配置更改,您仍然会有相同的错误。第一段中@mlt的可能重复说明:“我知道有很多关于这方面的帖子,但没有一个解决方案适合我。其中大多数涉及的规范不在/spec/features中,而我的规范在/spec/features中。“此段落特别引用了您链接到的问题。此问题不仅有较高的投票率,而且还附带了一个解决方案-这与您链接问题上的投票率最高的答案(不是解决方案)不同。添加该配置行对我很有效。