在Ruby on Rails中,给定一个字符串,是否可以确定是否已在该字符串上调用.html_safe?
提出问题的原因:我想编写一个控制器单元测试,以验证是否在特定字符串上未调用html_safe,以证明该字符串稍后被呈现到在视图的页面中,Rails会转义字符串(避免可能的XSS漏洞)。
我意识到我可以继续在测试中实际渲染页面,然后检查渲染的页面主体,但是我想知道是否还有更直接的方法吗?
答案 0 :(得分:3)
.html_safe
实际上不是返回类型String的对象,而是返回类型ActiveSupport::SafeBuffer(是String的派生类)的对象。
因此,致电:
my_string.is_a?(ActiveSupport::SafeBuffer)
false
的结果时,才返回.html_string
。
答案 1 :(得分:2)
有html_safe?
:
s = 'foo'
s.html_safe? #=> false
s = 'foo'.html_safe
s.html_safe? #=> true
请注意,如果您调用“破坏性”方法,则ActiveSupport::SafeBuffer
会恢复为不安全状态:
s = 'foo'.html_safe
s.html_safe? #=> true
s.capitalize! #=> 'Foo'
s.html_safe? #=> false