当我在我的控制器中分配
@my_hash = { :my_key => :my_value }
并通过做测试控制器
get 'index'
assigns(:my_hash).should == { :my_key => :my_value }
那么我收到以下错误消息:
expected: {:my_key=>:my_value},got: {"my_key"=>:my_value} (using ==)
为什么这个自动符号到字符串转换发生了?为什么会影响哈希的关键?
如果Rails以某种方式得到它,那么它可能最终成为一个HashWithIndifferentAccess,并且在内部使用字符串键.你可能想要验证类是一样的:
assert_equal Hash,assigns(:my_hash).class
参数始终被处理为无关的访问类型的哈希,因此您可以使用字符串或符号进行检索.如果你把这个分配给你的params哈希的get或post调用,或者你可能会被转换.
你可以做的另一件事就是冻结它,看看有没有人尝试修改它,因为它会抛出异常:
@my_hash = { :my_key => :my_value }.freeze
原文链接:https://www.f2er.com/ruby/271557.html