首页 > 解决方案 > 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)

标签: rspecrspec-rails

解决方案


一般来说,您不应该测试私有方法 - 只需继续测试公共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

推荐阅读