많은 Rails 프로젝트에서 Capybara와 Capybara-webkit과 함께 RSpec을 사용했으며 일반적으로 원활하게 작동합니다. 웬일인지 이번에는 js: true
기능 사양을 구성하는 데 문제가 있습니다. 그들은 데이터베이스와 제대로 상호 작용하지 않습니다. 나는 factory_girl
과 database_cleaner
을 사용하여 테스트 db 내용을 관리합니다. js: true
테스트의 경우 DatabaseCleaner.strategy = :truncation
이 database_cleaner.rb
인데도 여전히 작동하지 않습니다. 이상하게도, ActiveRecord::Base.establish_connection
을 databse_cleaner.rb
에 넣으면 테스트가 잘됩니다. 왜?? 여기capybara-webkit js : true rspec 테스트가 데이터베이스와 상호 작용할 수 없음
는 rails_helper.rb
입니다 :이 변경하면
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
:이 (spec/support
에 위치) database_cleaner.rb
입니다
ENV['RAILS_ENV'] ||= 'test'
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup'
Bundler.require
require 'pry-byebug'
require 'capybara/rspec'
require 'capybara/webkit'
require 'database_cleaner'
require 'webmock/rspec'
WebMock.disable_net_connect!(allow_localhost: true)
# use `describe 'Feature', type: :feature, js: true` to use this driver
Capybara.javascript_driver = :webkit
# tests use regular (faster) driver if they don't require js
Capybara.default_driver = :rack_test
Capybara::Webkit.configure do |config|
config.allow_unknown_urls
end
RSpec.configure do |config|
config.after(:suite) do
FileUtils.rm_rf(Dir["#{Rails.root}/spec/test_files/"])
end
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__)
abort("The Rails environment is running in production mode!") if
Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!
Capybara::Webkit.configure(&:block_unknown_urls)
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 = false
config.infer_spec_type_from_file_location!
# Filter lines from Rails gems in backtraces.
config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
end
이 중요한 spec_helper.rb
의 일부입니다 , 테스트는 th와 상호 작용할 수 있습니다. 전자 db 제대로 :
config.before(:each, js: true) do
ActiveRecord::Base.establish_connection
DatabaseCleaner.strategy = :truncation
end
왜? DB 연결을 설정하기 위해 명시 적으로 말해야 할 필요는 없습니다.
어떤 버전이 표시되지 않는 이유는 무엇입니까? –