rspec - RSpec:来自 ActiveRecord::Base.connection 的测试结果
问题描述
我有以下方法将执行大量原始 sql 并将其返回到数组中。
然后我将数组转换为 JSON。我想编写一个测试来检查这种对 Json 的转换是否正确。
def get_data
results = connection.raw_connection.execute(sql).each
transform_results(results)
end
private
def transform_results(results)
{
some_value: results[0]['some_value'],
another_value: results[0]['another_value']
}
end
假设我模拟了一个数组,我如何编写一些 Rspec 来测试transform_results
检查 Json 映射是否正确的方法。results
像这样的东西?
allow_any_instance_of(?????).to receive(:each).and_return(result)
解决方案
一般来说,您不应该测试私有方法 - 只需继续测试公共get_data
方法。
这是一个堆栈问题:我应该使用 RSpec 测试私有方法吗?
但是,有一种方法可以使用send测试私有方法。这是一个关于如何在 RSpec 中测试私有方法的堆栈问题。
要测试哈希(您可能会发现对 test 有用get_data
),您可以使用包含匹配器
it 'maps results correctly' do
expect(instance.send(:transform_results, :results)).to include(some_value: 'some_value', antoher_value: 'antoher_value')
end
推荐阅读
- python - 在 Win10 上从 Python 备份 Postgres
- javascript - 如何在 Maps Javascript api 中制作谷歌标记?
- c++ - c++ 多个 if 语句。为什么 else 语句也会执行?
- javascript - 用 PHP 数组填充 slickgrid(JS)
- selenium-webdriver - 量角器 - 无法在配置文件中启动具有功能和 multiCapabilities 的 Firefox
- python - Python os.listdir() 不返回某些文件
- postgresql - 如何使用 pg_read_file 和 missing_ok=true 读取完整文件?
- java - Hibernate 从 SpringBoot MultiModuleProject 在 Postgre 中生成表
- java - 如何解决错误“”无法实例化类型 Triple“”
- c# - 如何在asp.net core中实现基于用户类型的API速率限制