Быстрые тесты, особенно юнит-тесты, должны быть написаны, и в этом нет никаких сомнений. Как настроить RSpec для выдачи ошибки при обнаружении попадания в базу данных в тесте, помеченном как :unit
. Это усиливает стратегию написания быстрых тестов и позволяет избежать попаданий в базу данных, когда в этом нет необходимости.
Сейчас у меня есть этот код, но он всегда выдает ошибку, несмотря ни на что, даже если я поставлю простое puts "Hello"
в тестовом примере.
config.around(:each, :unit) do |example|
callback = lambda { |name, start, finish, message_id, payload|
raise "Nope! Accessing the database in a unit test is not allowed!!\n\n Offending Query\n#{ payload[:sql] }"
}
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
example.run
end
end
RSpec.describe CategoryTranslationCreator, :unit do
it 'creates a category translation' do
puts "Testing..."
end
end
повышает
Got 0 failures and 2 other errors:
1.1) Failure/Error: raise "Cannot access the database in a unit test!\n\n Offending Query\n#{"="*20}\n#{ payload[:sql] }"
RuntimeError:
Cannot access the database in a unit test!
Offending Query
====================
BEGIN
# ./spec/rails_helper.rb:54:in `block (3 levels) in <top (required)>'
# /home/jedrek/.rvm/gems/ruby-2.4.0/gems/database_cleaner-1.7.0/lib/database_cleaner/active_record/transaction.rb:12:in `start'
# /home/jedrek/.rvm/gems/ruby-2.4.0/gems/database_cleaner-1.7.0/lib/database_cleaner/base.rb:90:in `start'
# /home/jedrek/.rvm/gems/ruby-2.4.0/gems/database_cleaner-1.7.0/lib/database_cleaner/configuration.rb:75:in `block in start'
# /home/jedrek/.rvm/gems/ruby-2.4.0/gems/database_cleaner-1.7.0/lib/database_cleaner/configuration.rb:75:in `each'
# /home/jedrek/.rvm/gems/ruby-2.4.0/gems/database_cleaner-1.7.0/lib/database_cleaner/configuration.rb:75:in `start'
# ./spec/support/database_cleaner.rb:12:in `block (2 levels) in <top (required)>'
# ./spec/rails_helper.rb:57:in `block (3 levels) in <top (required)>'
# ./spec/rails_helper.rb:56:in `block (2 levels) in <top (required)>'
1.2) Failure/Error: raise "Cannot access the database in a unit test!\n\n Offending Query\n#{"="*20}\n#{ payload[:sql] }"
RuntimeError:
Cannot access the database in a unit test!
Offending Query
====================
SELECT c.relname FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ANY (current_schemas(false)) AND c.relkind IN ('r')
# ./spec/rails_helper.rb:54:in `block (3 levels) in <top (required)>'
# ./spec/support/database_cleaner.rb:19:in `block (2 levels) in <top (required)>'
# ./spec/rails_helper.rb:57:in `block (3 levels) in <top (required)>'
# ./spec/rails_helper.rb:56:in `block (2 levels) in <top (required)>'