- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一段时间我在使用 Selenium/Spork/Rspec,将 cache_classes 设置为 false,一切似乎都正常。
在切换到 webkit 时,我开始遇到与 cache_classes 相关的错误(例如预期的用户,得到用户),所以我一直在努力尝试将 cache_classes 设置为 true。
但是无论我做什么,我都会遇到以下错误:
Capybara::Driver::Webkit::WebkitInvalidResponseError:
Unable to load URL: http://127.0.0.1:56398/login
我已经尝试过各种方法...包括:
开始怀疑我是否应该接受 cache_classes = false,并弄清楚如何避免 Factory girl 错误。任何帮助,将不胜感激。我的spork文件如下:
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rails'
require 'capybara/rspec'
require 'database_cleaner'
require 'factory_girl'
require 'authlogic/test_case'
require 'email_spec'
include Authlogic::TestCase
require File.expand_path("../../config/environment", __FILE__)
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
config.mock_with :rspec
ApplicationController.skip_before_filter :activate_authlogic
config.include(EmailSpec::Helpers)
config.include(EmailSpec::Matchers)
config.include Capybara::DSL
# 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 = false
# 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
config.before(:suite) do
DatabaseCleaner.strategy = :truncation, {:except => %w[ages coefficients weights1 weights2 weights3 weights4 weights5 weights6 weights7 weights8 etfs]}
DatabaseCleaner.clean
end
config.before(:each) do
DatabaseCleaner.start
Capybara.current_driver = :webkit if example.metadata[:js]
#Capybara.current_driver = :selenium if example.metadata[:js]
activate_authlogic
ActiveRecord::Base.instantiate_observers
end
config.after(:each) do
DatabaseCleaner.clean
Capybara.use_default_driver if example.metadata[:js]
end
Capybara.default_selector = :css
end
# 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}
## SUPPORT METHODS ##
## (erased for clarity) ##
## ##
ActiveSupport::Dependencies.clear
end
Spork.each_run do
#FactoryGirl.reload
# Required to fix a recurring error when testing Active_Admin stuff
# See here: http://railsgotchas.wordpress.com/2012/01/31/activeadmin-spork-and-the-infamous-undefined-local-variable-or-method-view_factory/
# Delete at some point if active admin or whoever fixes this
ActionView::Template.register_template_handler :arb, lambda { |template|
"self.class.send :include, Arbre::Builder; @_helpers = self; self.extend ActiveAdmin::ViewHelpers; @__current_dom_element__ = Arbre::Context.new(assigns, self); begin; #{template.source}; end; current_dom_context"
}
#ActiveSupport::Dependencies.clear
end
更新:添加示例规范以防万一它有帮助....
describe "Items" do
before(:each) do
@user = Factory.create(:user)
activate_authlogic
b = # something not important
end
describe "usage paths" do
it "the form directly from the basic_simulation show page should have correctly functioning javascript validation", :js => true do
request_sign_in(@user) # This is a helper method which goes through the login form
visit '/basic_simulation'
fill_in "amount", :with => "-5000"
click_button "Calculate"
page.should have_selector("label.jquery-validator.amount-error", :text => "Please enter a value greater than or")
fill_in "amount", :with => "5000"
click_button "Calculate"
page.should have_selector("input#amount", :value => "5000")
end
end
最佳答案
由于 Capybara-webkit 和测试套件的线程问题,您遇到了问题。
Jose Valim 在 a recent blog post. 中解释得更清楚
如果您遵循他的建议,那么您应该能够打开事务固定装置,完全删除数据库清理器,并且在使用 capybara-webkit 进行测试期间不会再出现数据问题。您也会在测试性能方面得到很好的提升。
技巧是确保 Jose 的建议在 Spork.each_run
block 中,否则它将不起作用。为了清楚起见,这里是我的 spec_helper.rb
的相关部分。
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
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
Capybara.default_driver = :rack_test
Capybara.default_selector = :css
Capybara.javascript_driver = :webkit
end
end
Spork.each_run do
if Spork.using_spork?
ActiveRecord::Base.instantiate_observers
end
require 'factory_girl_rails'
# Forces all threads to share the same connection, works on Capybara because it starts the web server in a thread.
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection || retrieve_connection
end
end
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
end
其他一些小建议:
Spork.each_run
中使用 require factory_girl_rails
block 和 require factory_girl
应该从 prefork
ActiveSupport::Dependencies.clear
,尽管有些人在没有它的情况下仍然遇到问题,因此您应该尝试删除它。ActiveRecord::Base.instantiate_observers
但无论如何,只有在使用观察器时才需要它,我知道它应该在 each_run
block 。尝试所有这些,看看它是否适合你。
关于ruby-on-rails - 从 Selenium 更改为 Capybara-Webkit 后出现 cache_classes/Spork 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476880/
在rails开发环境中,cache_classes是关闭的,所以你可以修改app/下的代码,不用重启服务器就可以看到变化。 不过,在所有环境中,中间件只会创建一次。所以如果我有这样的中间件: clas
我有两个名为 Scope 和 ScopeItem 的 ActiveRecord 模型,具有 has_many 关系: class Scope :environment do scope
我正在尝试使用 TestUnit 设置 Spork 和 Capybara,并且正在运行 进入 test.rb 配置问题。 问题是 Spork 要求 config.cache_classes 设置为fa
我只是想知道,当将config.cache_classes设置为true时,没有找到对缓存的模型类(ActiveRecord)中的内容的明确响应? 有人可以告诉我或指向我没有找到的文档吗? 谢谢 最佳
我是 RoR 的新手,目前需要为 redmine 开发一个插件(目前还不是问题)。因此,我设置了 ruby 1.8.7、redmine 1.0.5 和 radrails 2。ruby 解释器在 r
我正在向我的 rails 应用程序添加一个可安装的引擎,它提供了类似论坛的功能(即添加问题、答案、评论等)。在开发中一切正常。然而,在登台/生产中,我在尝试创建答案时遇到错误,特别是 CanCan 权
我正在关注 Michael Hartl (railstutorial.org) 的 Ruby on Rails 教程。 在某些时候,我厌倦了测试失败只是因为测试使用了旧的缓存版本的类,所以我在测试环境
我有一个 gem,它通过 routes.rb 作为引擎安装在我的 rails 应用程序中& Gemfile .以下是重要的部分: 应用程序' gem 文件 source 'https://rubyge
环境: rails 2.3.2 动态接口(interface) 0.4.1 DBD/ODBC 0.2.4 场景: 我有一个 Rails 应用程序,它通过常规批处理作业将大部分数据从外部 SQL DB
我有一个引擎,它在其初始化程序中扩展另一个引擎的类,如下所示: module MyApp class Engine < ::Rails::Engine initializer
我有一些针对我的开发 Rails 服务器运行的 iPhone 客户端测试。如果我在 Rails 配置中打开类缓存,整个套件的运行速度将提高一个数量级。另一方面,当我没有实际运行测试时,这会减慢开发速度
我正在尝试通过缓存开发中的类来加速我的 web 前端, My::Application.configure do config.cache_classes = true end 但如果我的模型或库
我在使用 Spork 测试服务器时遇到了问题。 如果我在 config/environments/test.rb 中设置 config.cache_classes = false 则规范开始出现错误。
有一段时间我在使用 Selenium/Spork/Rspec,将 cache_classes 设置为 false,一切似乎都正常。 在切换到 webkit 时,我开始遇到与 cache_classes
应用程序不会在 config.cache_classes 设置为 true 的生产模式下启动。它在堆栈跟踪中给出以下错误: $ bundle exec rails s -e productio
我有一个在 Rails 4.1.1 应用程序中使用的模块 module A extend ActiveSupport::Concern included do #Some cod
我是一名优秀的程序员,十分优秀!