我使用 postgres 模式通过多租户 tut 工作。
每次运行后都需要清除测试数据库中每个租户的模式,以便测试正确运行。
rspec 产生以下错误
An error occurred in an after hook
PG::Error: ERROR: syntax error at or near "where"
LINE 5: where nspowner != (select oid from pg_roles where role...
1) account scoping displays only account A's records
Failure/Error: let!(:account_a) { FactoryGirl.create(:account_with_schema) }
Apartment::SchemaExists:
The schema test1 already exists.
# ./app/models/subscribem/account.rb:20:in `create_schema'
# ./spec/support/factories/account_factory.rb:11:in `block (4 levels) in <top (required)>'
# ./spec/features/accounts/scoping_spec.rb:4:in `block (2 levels) in <top (required)>'
这是每次测试后尝试清除数据库的代码。
spec_helper.rb
config.after(:each) do
Apartment::Database.reset
DatabaseCleaner.clean
connection = ActiveRecord::Base.connection.raw_connection
schema = connection.query(%Q{
SELECT 'drop schema ' || nspname || ' cascade;'
from pg_namespace
where nspname != 'public' AND
where nspowner != (select oid from pg_roles where rolname = 'postgres');
})
schemas.each do |query|
connection.query(query.values.first)
end
end