Cucumber失败,错误undefined方法`visit' [英] Cucumber fails with error undefined method `visit'

查看:292
本文介绍了Cucumber失败,错误undefined方法`visit'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

运行

 芜菁黄瓜

甚至传递未经测试的功能。
,同时运行

 黄瓜功能/ something.feature 

throws

 未定义方法`visit'for#< Object :0x00000001b13950> (NoMethodError)



我已经搜索了一些github问题,他们谈论它,
运行没有机架的水豚会产生错误使用网址参数是有帮助的,但没有撤消我的问题



UPDATE
我触摸了以下内容capybara 自述


使用Capybara与黄瓜



黄瓜轨道宝石配有水豚支持内置。如果你
没有使用Rails,手动加载capybara / cucumber模块:

  require'capybara / cucumber'
Capybara.app = MyRackApp


包括上述?
我试图将上面的添加到env.rb并得到这个错误:


未初始化的常量ActionController(NameError)


注释后,我仍然得到相同的错误。



  source'https://rubygems.org'

#add dependency
gem'diff-lcs',> = 1.2.0
gem'rspec-expectations',〜> 3.0.0

#add cucumber
:test do
gem'cucumber-rails',:require => false
#database_cleaner不是必需的,但强烈建议
#gem'database_cleaner',〜> 1.2.0
gem'database_cleaner'
end

#add rspec
group:development,:test do
gem'rspec-rails','〜> 3.0'
gemcapybara
gem'factory_girl_rails'
gem'watir-webdriver'
gem'selenium-webdriver','2.35.0'
gem' rubyzip'
gem'zip-zip'
end

#Bundle edge Rails:gem'rails',github:'rails / rails'
gem'rails ','4.1.7'
#使用sqlite3作为活动记录的数据库
gem'sqlite3'
#使用SCSS作为样式表
gem'sass-rails' > 4.0.3'
#使用Uglifier作为JavaScript资源的压缩器
gem'uglifier','> = 1.3.0'
#使用CoffeeScript作为.js.coffee资源和视图
gem'coffee-rails','〜> 4.0.0'
#查看https://github.com/sstephenson/execjs#readme获得更多支持的运行时
#gem'therubyracer',platforms::ruby

#使用jquery作为JavaScript库
gem'jquery-rails'
#Turbolinks使您的Web应用程序中的以下链接更快。阅读更多:https://github.com/rails/turbolinks
gem'turbolinks'
#轻松构建JSON API。阅读更多:https://github.com/rails/jbuilder
gem'jbuilder','〜> 2.0'
#bundle exec rake doc:rails在doc / api下生成API。
gem'sdoc','〜> 0.4.0',group::doc

#Spring通过保持应用程序在后台运行来加速开发。阅读更多:https://github.com/rails/spring
gem'spring',group::development


b $ b

这里是spec / spec_helper.rb(截断)

  ENV [RAILS_ENV] || = test'
require File.expand_path(../../ config / environment,__FILE__)
require'capybara'
include Capybara :: DSL#添加此行解决了错误
require'rspec / rails'
Dir [Rails.root.join(spec / support / ** / *。rb)]。 require f}
ActiveRecord :: Migration.maintain_test_schema!
RSpec.configure do | config |
#如果你不使用ActiveRecord或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
config.infer_spec_type_from_file_location!
config.include Capybara :: DSL
end

这里是env.rb

  require'capybara'
require'capybara / dsl'
require'capybara / cucumber'
#require'capybara / rails'
#require'capybara / session'
ActionController :: Base.allow_rescue = false
begin
DatabaseCleaner.strategy =:transaction
rescue NameError
raise如果您希望使用它,您需要将database_cleaner添加到您的Gemfile(在:test组中)。
end
Cucumber :: Rails :: Database.javascript_strategy =:truncation




最后得到这里的答案: cucumber headless xvfb ubuntu



对于任何想要做无头浏览的人来说,这救了我:



包含在env.rb中:

  require'capybara' 
require'capybara / cucumber'
require'cucumber / rails'
require'capybara / rails'
require'capybara / dsl'

require' selenium / webdriver'



$ port =< port_number>

#Capybara.app_host ='< localhost>:< port>'
Capybara.configure do | config |
config.run_server = true
#Capybara.default_host =< localhost>:< port>
config.default_driver =:selenium
#config.app =请确保这不是nil
config.app_host =< hostname>:#{$ port.to_s}
config.server_port = $ port
end

#要添加chrome webdriver在您的机器上执行以下操作
#chmod + x chromedriver
#sudo mv chromedriver / usr / local / share /
#sudo ln -s / usr / local / share / chromedriver / usr / local / bin / chromedriver
#sudo ln -s / usr / local / share / chromedriver / usr / bin / chromedriver
#注册chrome作为默认Capybara webdriver
Capybara.register_driver:firefox do | app |
#optional
client = Selenium :: WebDriver :: Remote :: Http :: Default.new
#optional
#client.timeout = 120
Capybara :: Selenium :: Driver.new(app,:browser =>:firefox,:http_client => client)
end
#set默认js驱动程序
Capybara.javascript_driver =:firefox

#Include headless
require_relative'headless'

rb文件headless.rb:

  if Capybara.current_driver ==:selenium || Capybara.default_driver ==:selenium 
require'headless'

headless = Headless.new
headless.start

at_exit do
无头.destroy
end
end

env.rb和headless.rb in features / support folder



我可以进行bdd和web测试。


running

rake cucumber 

passes even untested features. while running

cucumber features/something.feature

throws

undefined method `visit' for #<Object:0x00000001b13950> (NoMethodError)

I have googled some github issues where they talk about it but to no relief. This Running Capybara without rack produces errors when using url parameters was helpful but didn't resovle my issue

UPDATE I did touch on the following from capybara readme

Using Capybara with Cucumber

The cucumber-rails gem comes with Capybara support built-in. If you are not using Rails, manually load the capybara/cucumber module:

require 'capybara/cucumber' 
Capybara.app = MyRackApp

But in which file to include the above? I tried adding the above to env.rb and got this error:

uninitialized constant ActionController (NameError)

Now after commenting it, I still get the same error.

Here is the gemfile:

source 'https://rubygems.org'

#add dependency
gem 'diff-lcs', ">= 1.2.0"
gem 'rspec-expectations', "~> 3.0.0"

#add cucumber
group :test do
  gem 'cucumber-rails', :require => false
  # database_cleaner is not required, but highly recommended
  #gem 'database_cleaner', "~> 1.2.0"
  gem 'database_cleaner'
end

#add rspec
group :development, :test do
  gem 'rspec-rails', '~> 3.0'
  gem "capybara"
  gem 'factory_girl_rails'
  gem 'watir-webdriver'
  gem 'selenium-webdriver', '2.35.0'
  gem 'rubyzip'
  gem 'zip-zip'
end

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.7'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc

# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring',        group: :development

Here is spec/spec_helper.rb (truncated)

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'capybara'
include Capybara::DSL # Adding this line solved the error
require 'rspec/rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!
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"
  config.infer_spec_type_from_file_location!
  config.include Capybara::DSL
end

Here is env.rb

require 'capybara'
require 'capybara/dsl'
require 'capybara/cucumber'
#require 'capybara/rails'
#require 'capybara/session'
ActionController::Base.allow_rescue = false
begin
  DatabaseCleaner.strategy = :transaction
rescue NameError
  raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
end
Cucumber::Rails::Database.javascript_strategy = :truncation

解决方案

May this answer help some lost soul.

Finally got the answer here: Cucumber headless xvfb ubuntu

For anyone wanting to do headless browsing, this rescued me:

Included following in env.rb:

require 'capybara'
require 'capybara/cucumber'
require 'cucumber/rails'
require 'capybara/rails'
require 'capybara/dsl'

require 'selenium/webdriver'



$port = <port_number>

#Capybara.app_host = '<localhost>:<port>'
Capybara.configure do |config|
  config.run_server = true
  #Capybara.default_host = "<localhost>:<port>"
  config.default_driver = :selenium
  #config.app = "make sure this isn't nil"
  config.app_host = "<hostname>:#{$port.to_s}"
  config.server_port = $port
end

#To add chrome webdriver do the following in your machine
#chmod +x chromedriver
#sudo mv chromedriver /usr/local/share/
#sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
#sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
#Register chrome as default Capybara webdriver
Capybara.register_driver :firefox do |app|
  # optional
  client = Selenium::WebDriver::Remote::Http::Default.new
  # optional
  #client.timeout = 120
  Capybara::Selenium::Driver.new(app, :browser => :firefox, :http_client => client)
end
#set default js driver
Capybara.javascript_driver = :firefox

#Include headless
require_relative 'headless'

headless is a relative rb file headless.rb:

if Capybara.current_driver == :selenium || Capybara.default_driver == :selenium
  require 'headless'

  headless = Headless.new
  headless.start

  at_exit do
    headless.destroy
  end
end

Both env.rb and headless.rb are in features/support folder

I am able to to do bdd and web testing.

这篇关于Cucumber失败,错误undefined方法`visit'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆