方法
实例公共方法
assert_no_queries(include_schema: false, &block) 链接
断言在给定的块中没有执行任何 SQL 查询。
assert_no_queries { post.comments }
如果提供了 :include_schema 选项,则会计算包括模式在内的所有查询。
assert_no_queries(include_schema: true) { Post.columns }
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/testing/query_assertions.rb, line 48 def assert_no_queries(include_schema: false, &block) assert_queries_count(0, include_schema: include_schema, &block) end
assert_no_queries_match(match, include_schema: false, &block) 链接
断言在给定的块中没有执行与模式匹配的 SQL 查询。
assert_no_queries_match(/SELECT/i) { post.comments }
如果提供了 :include_schema 选项,则会计算匹配匹配器的所有查询(包括模式相关的查询)。
assert_no_queries_match(/FROM pg_attribute/i, include_schema: true) { Post.columns }
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/testing/query_assertions.rb, line 93 def assert_no_queries_match(match, include_schema: false, &block) assert_queries_match(match, count: 0, include_schema: include_schema, &block) end
assert_queries_count(count = nil, include_schema: false, &block) 链接
断言在给定的块中执行的 SQL 查询数量与预期数量匹配。
# Check for exact number of queries assert_queries_count(1) { Post.first } # Check for any number of queries assert_queries_count { Post.first }
任何未初始化的事务都将被物化,以确保只计算在块内尝试的查询。
如果提供了 :include_schema 选项,则会计算包括模式在内的所有查询。设置此选项还会跳过租借连接以物化挂起的事务,因为我们希望计算在打开连接时执行的查询(例如,类型映射)。
assert_queries_count(1, include_schema: true) { Post.columns }
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/testing/query_assertions.rb, line 24 def assert_queries_count(count = nil, include_schema: false, &block) ActiveRecord::Base.lease_connection.materialize_transactions unless include_schema counter = SQLCounter.new ActiveSupport::Notifications.subscribed(counter, "sql.active_record") do result = _assert_nothing_raised_or_warn("assert_queries_count", &block) queries = include_schema ? counter.log_all : counter.log if count assert_equal count, queries.size, "#{queries.size} instead of #{count} queries were executed. Queries: #{queries.join("\n\n")}" else assert_operator queries.size, :>=, 1, "1 or more queries expected, but none were executed.#{queries.empty? ? '' : "\nQueries:\n#{queries.join("\n")}"}" end result end end
assert_queries_match(match, count: nil, include_schema: false, &block) 链接
断言在给定块中执行的 SQL 查询与预期模式匹配。
# Check for exact number of queries assert_queries_match(/LIMIT \?/, count: 1) { Post.first } # Check for any number of queries assert_queries_match(/LIMIT \?/) { Post.first }
如果提供了 :include_schema 选项,则会考虑与匹配器匹配的查询(包括模式相关的查询)。
assert_queries_match(/FROM pg_attribute/i, include_schema: true) { Post.columns }
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/testing/query_assertions.rb, line 65 def assert_queries_match(match, count: nil, include_schema: false, &block) ActiveRecord::Base.lease_connection.materialize_transactions counter = SQLCounter.new ActiveSupport::Notifications.subscribed(counter, "sql.active_record") do result = _assert_nothing_raised_or_warn("assert_queries_match", &block) queries = include_schema ? counter.log_all : counter.log matched_queries = queries.select { |query| match === query } if count assert_equal count, matched_queries.size, "#{matched_queries.size} instead of #{count} queries were executed.#{queries.empty? ? '' : "\nQueries:\n#{queries.join("\n")}"}" else assert_operator matched_queries.size, :>=, 1, "1 or more queries expected, but none were executed.#{queries.empty? ? '' : "\nQueries:\n#{queries.join("\n")}"}" end result end end