しばらくの間、私はcache_classesをfalseにしてSelenium/Spork/Rspecを使用していました。SeleniumからCapybara-Webkitに変更した後でcache_classes/Sporkに関する問題が発生しました
ウェブキットに切り替える際、私はcache_classesに関連するエラーが発生し始めました(たとえば、期待ユーザー、ユーザーがいる)ので、cache_classesをtrueに設定しようとしています。
私は何をすべきかに関係なく、私は次のエラーで終わるしかし:私は物事のすべての種類を試してみました
Capybara::Driver::Webkit::WebkitInvalidResponseError:
Unable to load URL: http://127.0.0.1:56398/login
...を含む:
- activesupportの:: Dependencies.clear preforkの各_run両方のブロックでは、ここで
- コード:http://my.rails-royce.org/2012/01/14/reloading-models-in-rails-3-1-when-usign-spork-and-cache_classes-true/
私は単にcache_classes = falseで生きていて、工場の女の子のエラーを避ける方法を見つけ出すべきか疑問に思っています。どんな助けもありがとう。
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
UPDATE: SPECは、念のために、それは助け例を追加....あなたはカピバラ-webkitのに問題がスレッドに起因する問題が発生している
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
これは、transactional_fixturesをオンに戻すことができると言いました。私の問題はcache_classesを使っているように見えるでしょう...(上記の方法で、use_transactional_fixturesとcache_classesの両方をtrueに設定できますか? – Brandon
"Capybara.javascript_driver =:webkit"を使用している場合、テストでjavascriptを実行する方法をどのように指定しますか? (私は現在:js =>真のビジネスCapybara.current_driver = xxの場合メタデータの場合...) – Brandon
はい。 'test.rb'ファイルで' config.cache_classes = true'を変更することができます。 jsファイルの表示は以前と同じです。これはCapabaraインジケータで、 'spec_helper.rb'で設定された選択されたjsドライバに渡されます。 – nmott