Rails集成测试中assert_select检测数值属性触发Nokogiri语法错误
解决Rails集成测试中assert_select检测数字属性值的CSS语法错误
这个问题我之前踩过坑!你遇到的Nokogiri::CSS::SyntaxError是因为CSS选择器对纯数字属性值的解析规则导致的——当属性值是纯数字(比如你的对象ID)时,必须用引号包裹,否则Nokogiri会把它当成非法语法处理。
问题原因
你原来的代码:
assert_select "input[type=checkbox][value=#{c.id.to_s}]"
生成的选择器类似input[type=checkbox][value=283557850],CSS规范里这种纯数字的属性值属于“标识符”的例外情况,直接写会触发解析错误;而字母开头的属性值符合标识符规则,所以能正常解析。
三种可行的解决方案
方案1:给数字属性值加单引号
直接在插值前后包裹单引号,让选择器符合CSS语法:assert_select "input[type=checkbox][value='#{c.id.to_s}']"方案2:用双引号(注意转义)
如果习惯用双引号,需要转义内部的双引号:assert_select "input[type=checkbox][value=\"#{c.id.to_s}\"]"方案3:使用占位符(推荐)
Rails的assert_select支持用占位符?来传递参数,这种方式更安全,还能避免字符串拼接的潜在问题:assert_select "input[type=checkbox][value=?]", c.id.to_s
亲测这三种方式都能解决你的语法错误,个人最推荐第三种写法,代码更清晰也更易维护。
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

