rspec テストを実行するためにメモリ sqlite データベースを使用しています。これは非常にうまく機能します。セレン駆動テスト ( describe "does something", :js => true do
) を実行している場合にのみ、起動中の Web ブラウザーでエラーが発生SQLite3::SQLException: no such table: users: SELECT "users".* FROM "users" WHERE ...
WEBrick/1.3.1 (Ruby/2.0.0/2013-02-24) at 127.0.0.1:57827
します。メモリ内データベースを使用しているときに、セレン駆動テストを実行するためのソリューションを探しています。
詳細:
ruby on rails 4.0と以下のgemを使っています(抜粋)
gem 'sqlite3', '1.3.7'
gem 'rspec-rails', '2.13.0'
gem 'capybara', '~> 2.1.0.beta1'
gem 'selenium-webdriver', '2.35.1'
データベース.yml
test:
adapter: sqlite3
database: ":memory:"
pool: 5
timeout: 5000
spec_helper.rb
require 'rubygems'
require 'spork'
Spork.prefork do
# snip
load "#{Rails.root.to_s}/db/schema.rb" # set up memory db
RSpec.configure do |config|
config.use_transactional_fixtures = false #using database cleaner
#snip
config.before :suite do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before type: :request do
DatabaseCleaner.strategy = :truncation
end
# Reset so other non-request specs don't have to deal with slow truncation.
config.after type: :request do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before do
DatabaseCleaner.start
ActionMailer::Base.deliveries.clear
end
config.after do
DatabaseCleaner.clean
end
end
end
この問題は、カピバラ Web サーバーが (テスト自体で使用される接続とは対照的に) 独自のデータベース接続を使用することと関係があるようですが、メモリ内データベースはそれを作成した 1 つの接続でしか利用できません。
この質問はすでにいくつかの洞察を提供しました: (DatabaseError: no such table: django_session) ERROR during Django 1.3 selenium testing
では、どうすればセレンテストをメモリデータベース互換にすることができますか?
事前にどうもありがとうございました。