diff --git a/.travis.yml b/.travis.yml
index 897164183c3ee613870b7eed4b76ec536640ae7e..943ff7d07bc5e2bc465d89528e4ec1e3e031effb 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,9 @@
 language: ruby
+env:
+  - DB=
+  - DB=sqlite
+  - DB=postgres
+  - DB=mysql
 rvm:
   - 1.9.3
   - 2.0.0
diff --git a/Gemfile b/Gemfile
index ab421abe832a2373962204611267b89b515b3606..eb405d930106eb8d72f93b43e9f1d833d8c4f8e6 100644
--- a/Gemfile
+++ b/Gemfile
@@ -23,13 +23,15 @@ group :development, :test do
 end
 
 group :test do
+  gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
+
   platforms :ruby do
     gem 'pg'
-    gem 'sqlite3'
     gem 'mysql2'
   end
 
   platforms :jruby do
+    gem 'jdbc-sqlite3'
     gem 'activerecord-jdbcpostgresql-adapter'
   end
 end
diff --git a/Rakefile b/Rakefile
index 2ee05cce85e7c4cf2d7adabe21fa1778eda1f79f..52ae639e68a2aa8a76f73b62dcdcbf91370030db 100644
--- a/Rakefile
+++ b/Rakefile
@@ -9,23 +9,6 @@ def config
 end
 
 namespace :db do
-  require 'active_record'
-  desc 'Migrate the database through scripts in test/db/migrate.'
-  task :migrate => :environment do
-    version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
-    ActiveRecord::Migrator.migrate('test/db/migrate', version)
-  end
-
-  task :environment do
-    require 'logger'
-    ActiveRecord::Base.logger = Logger.new(STDOUT)
-    ActiveRecord::Base.configurations = config
-    # Establish a database connection
-    db_name = ENV['DB'] || 'sqlite'
-    ActiveRecord::Base.establish_connection(db_name)
-    ActiveRecord::Base.default_timezone = :utc
-  end
-
   task :create do
     if ACCEPTED_DB_VALUES.include? ENV['DB']
       Rake::Task["db:#{ENV['DB']}:create"].invoke
@@ -38,7 +21,7 @@ namespace :db do
     end
   end
 
-  task :reset => [:drop, :create, :migrate]
+  task :reset => [:drop, :create]
 
   namespace :mysql do
     desc 'Create the MySQL test databases'
diff --git a/test/database.yml b/test/database.yml
index 8c1d3bb3ddfc2698f2747e6ae515ff6735785a7e..63232ed58db252c2928a61c3e35f43e94b57d999 100644
--- a/test/database.yml
+++ b/test/database.yml
@@ -1,7 +1,7 @@
 # test/database.yml
 sqlite:
   adapter: sqlite3
-  database: "test/geocoder_test.sqlite"
+  database: ":memory:"
   timeout: 500
 mysql:
   adapter: mysql2
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 441bab145bceb8570b9cddc2281982f6701f252d..6a048dad9b0ca5bfb12f0388747fe596b25eadd9 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -4,17 +4,20 @@ require 'test/unit'
 $LOAD_PATH.unshift(File.dirname(__FILE__))
 $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
 
-if ENV['DB']
-  require 'rails'
+require 'yaml'
+configs = YAML.load_file('test/database.yml')
+
+if configs.keys.include? ENV['DB']
   require 'active_record'
 
   # Establish a database connection
-  configs = YAML.load_file('test/database.yml')
   ActiveRecord::Base.configurations = configs
 
   db_name = ENV['DB']
   ActiveRecord::Base.establish_connection(db_name)
   ActiveRecord::Base.default_timezone = :utc
+
+  ActiveRecord::Migrator.migrate('test/db/migrate', nil)
 else
   class MysqlConnection
     def adapter_name
@@ -69,10 +72,10 @@ else
       end
     end
   end
+end
 
-  # simulate Rails module so Railtie gets loaded
-  module Rails
-  end
+# simulate Rails module so Railtie gets loaded
+module Rails
 end
 
 # Require Geocoder after ActiveRecord simulator.