Ruby on rails rspec分配将哈希键转换为字符串
我有一个控制器操作,其中我将哈希分配给一个实例变量。在我的rspec测试文件中,我使用assigns对其进行测试,实例变量被指定给我期望的值。出于某种原因,assigns给了我一个带有字符串键的散列。如果在控制器中打印实例变量,则有符号键 请在下面查找代码。它被简化了Ruby on rails rspec分配将哈希键转换为字符串,ruby-on-rails,hash,rspec,Ruby On Rails,Hash,Rspec,我有一个控制器操作,其中我将哈希分配给一个实例变量。在我的rspec测试文件中,我使用assigns对其进行测试,实例变量被指定给我期望的值。出于某种原因,assigns给了我一个带有字符串键的散列。如果在控制器中打印实例变量,则有符号键 请在下面查找代码。它被简化了 class TestController < ApplicationController def test @test_object = {:id => 1, :value => 2, :name =
class TestController < ApplicationController
def test
@test_object = {:id => 1, :value => 2, :name => "name"}
end
end
上述测试失败,并显示错误消息
expected: {:id=>1, :value=>2, :name=>"name"}
got: {"id"=>1, "value"=>2, "name"=>"name"}
请帮助我理解它为什么这样做。RSpec从常规Rails测试/单元帮助程序中借用赋值,并与\u interference\u访问一起使用,以返回请求的实例变量,如赋值:my\u var Hashwith_interference_access返回哈希的一个键字符串化版本作为深度副本,其副作用是字符串化作为哈希的实例变量的键 如果您尝试匹配整个散列,它将失败,但如果您检查特定键的值,无论它们是符号还是字符串,它都会起作用 也许举个例子有助于澄清:
{:a => {:b => "bravo"}}.with_indifferent_access => {"a"=>{"b"=>"bravo"}}
{:a => {:b => "bravo"}}.with_indifferent_access[:a][:b] => "bravo"
RSpec从常规的Rails测试/单元帮助程序借用assigns,并与_interference_access一起使用,以返回请求的实例变量,如assigns:my_var中所示 Hashwith_interference_access返回哈希的一个键字符串化版本作为深度副本,其副作用是字符串化作为哈希的实例变量的键 如果您尝试匹配整个散列,它将失败,但如果您检查特定键的值,无论它们是符号还是字符串,它都会起作用 也许举个例子有助于澄清:
{:a => {:b => "bravo"}}.with_indifferent_access => {"a"=>{"b"=>"bravo"}}
{:a => {:b => "bravo"}}.with_indifferent_access[:a][:b] => "bravo"
可能的重复可能的重复