You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:47:31