I'm new with Minitest and Apartment and have difficulties to configure the environment correctly to run the test cases. I want to make acceptance testing using Capybara & Selenium. When I run my tests I get following error message:
Apartment::TenantNotFound: Apartment::TenantNotFound: One of the following schema(s) is invalid: "test-tenant" "public"
So it seems tenant is not created correctly. Apartment gem has instructions of how to use it with Rspec but I don't know how to make similar setup in Minitest. How should tenants be defined so Minitest can see them?
My test_helpers.rb:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
require "minitest/rails/capybara"
Minitest::Reporters.use!
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
end
class ActionController::TestCase
include Devise::TestHelpers
end
class ActionDispatch::IntegrationTest
end
And the test case:
require "test_helper"
class LoginTest < Capybara::Rails::TestCase
def setup
Apartment::Tenant.drop( "test-tenant" ) rescue nil
Apartment::Tenant.create( "test-tenant" ) rescue nil
Apartment::Tenant.switch!( "test-tenant" )
# Since we are using Apartment gem, we need to tell Capybara to connect our testing tenant URL + port number
Capybara.server_port = 5000
Capybara.always_include_port = true
Capybara.app_host = "http://test-tenant.lvh.me"
end
feature "Login" do
scenario "with correct credentials", js: true do
visit '/accounts/sign_in'
fill_in("account[email]", with: "#{accounts(:tenant_user).email}")
fill_in("account[password]", with: "password")
click_button("Sign in")
page.must_have_content("Signed in successfully.")
visit '/'
page.must_have_content("Welcome")
end
end
end
I figured the answer out myself after testing some different combinations. The solution is actually quite simple. All Apartment & Capybara related configs should be defined in test_helpers.rb file.
test_helpers.rb:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
require "minitest/rails/capybara"
Minitest::Reporters.use!
Apartment::Tenant.drop( "test-tenant" ) rescue nil
Apartment::Tenant.create( "test-tenant" ) rescue nil
Apartment::Tenant.switch!( "test-tenant" )
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
end
class ActionController::TestCase
include Devise::TestHelpers
end
class ActionDispatch::IntegrationTest
end
# Since we are using Apartment gem, we need to tell Capybara to connect our testing tenant URL + port number
Capybara.server_port = 5000
Capybara.always_include_port = true
Capybara.app_host = "http://test-tenant.lvh.me"
test case is simply:
require "test_helper"
class LoginTest < Capybara::Rails::TestCase
def setup
end
feature "Login" do
scenario "with correct credentials", js: true do
visit '/accounts/sign_in'
fill_in("account[email]", with: "#{accounts(:tenant_user).email}")
fill_in("account[password]", with: "password")
click_button("Sign in")
page.must_have_content("Signed in successfully.")
visit '/'
page.must_have_content("Welcome")
end
end
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With