如何测试运行 SQL 查询的方法
How to test a method that runs an SQL query
我做了一个自定义 SQL 查询,我想创建一个单元测试来证明它有效。我已经在 SQLDeveloper 中对其进行了测试,它在我的测试数据库中按我希望的方式工作,但我想为那些以后必须维护此代码的人留下一个单元测试。
def report_of_merchants_who_have_not_pressed_the_service_rendered_button
sql = "SELECT MIN(departure_date), ch_invoice.invoice_id
FROM ch_invoice
INNER JOIN ch_trip
ON ch_invoice.invoice_id = ch_trip.invoice_id
WHERE departure_date < SYSDATE
AND service_rendered = 0
AND paid = 1
Group By ch_invoice.invoice_id"
report = ActiveRecord::Base.connection.exec_query(sql)
render json: report
end
我的想法是创建四张发票,其中三张不符合上述标准,一张符合。我遇到困难的地方是如何检查查询是否仅 returns 返回一个响应。如何测试一行查询出来了?
澄清
我打算用 FactoryGirl 创建这些发票和旅行来填充模型。那还能用吗?
将此方法包装在 class 中。
class MerchantReport
class << self
def for_not_pressed_the_service_rendered_button
sql = "SELECT MIN(departure_date), ch_invoice.invoice_id
....
ActiveRecord::Base.connection.exec_query(sql)
end
在你的测试中,
report = MerchantReport.for_not_pressed_the_service_rendered_button
FWIW,我认为报告之类的查询与发票或其他模型没有任何关系,属于它们自己的 class。
是的,您可以在设置中创建 4 张发票。此外,您可以为要测试的每个条件创建单独的测试。例如,您可以对日期 (departure_date < SYSDATE
) 进行一项测试。这可能比对所有条件进行一次测试更具可读性。
我做了一个自定义 SQL 查询,我想创建一个单元测试来证明它有效。我已经在 SQLDeveloper 中对其进行了测试,它在我的测试数据库中按我希望的方式工作,但我想为那些以后必须维护此代码的人留下一个单元测试。
def report_of_merchants_who_have_not_pressed_the_service_rendered_button
sql = "SELECT MIN(departure_date), ch_invoice.invoice_id
FROM ch_invoice
INNER JOIN ch_trip
ON ch_invoice.invoice_id = ch_trip.invoice_id
WHERE departure_date < SYSDATE
AND service_rendered = 0
AND paid = 1
Group By ch_invoice.invoice_id"
report = ActiveRecord::Base.connection.exec_query(sql)
render json: report
end
我的想法是创建四张发票,其中三张不符合上述标准,一张符合。我遇到困难的地方是如何检查查询是否仅 returns 返回一个响应。如何测试一行查询出来了?
澄清 我打算用 FactoryGirl 创建这些发票和旅行来填充模型。那还能用吗?
将此方法包装在 class 中。
class MerchantReport
class << self
def for_not_pressed_the_service_rendered_button
sql = "SELECT MIN(departure_date), ch_invoice.invoice_id
....
ActiveRecord::Base.connection.exec_query(sql)
end
在你的测试中,
report = MerchantReport.for_not_pressed_the_service_rendered_button
FWIW,我认为报告之类的查询与发票或其他模型没有任何关系,属于它们自己的 class。
是的,您可以在设置中创建 4 张发票。此外,您可以为要测试的每个条件创建单独的测试。例如,您可以对日期 (departure_date < SYSDATE
) 进行一项测试。这可能比对所有条件进行一次测试更具可读性。