【问题标题】:Porting from Rails 3.2 to Rails 4.2 rspec have_selector test fails从 Rails 3.2 移植到 Rails 4.2 rspec have_selector 测试失败
【发布时间】:2016-04-25 14:17:46
【问题描述】:

我的 Rails 3.2 应用程序的 Rspec 控制器测试如下所示:

get 'home'
response.should have_selector("img", alt: "can-logo', src: "/assets/can-logo.png")

我们使用 Rails 3.2 时通过的测试。现在使用 Rails 4.2,测试失败,错误消息如下所示:

 Failure/Error: response.should have_selector("img", alt: "can-logo", src: "/assets/can-logo.png")

   expected following output to contain a <img alt='can-logo' src='/assets/can-logo.png'/>

实际响应有以下字符串:

<img src="/assets/can-logo-7c448d46877fafd50ab64f7abae0ca10719221722dd3d1ae257f24fc449efa1d.png" alt="can-logo 7c448d46877fafd50ab64f7abae0ca10719221722dd3d1ae257f24fc449efa1d">

(作为参考,经过大量调整 gem、测试和一些代码后,我可以在本地运行应用程序,这个用例工作正常,Rails 控制台工作正常,我们的测试套件中的 700 个测试中有 685 个通过。在 15 个失败的测试中,大约有 5 个看起来像这种失败)。

这看起来像是在用资产做一些时髦的事情,但我现在不知道如何让 RSpec 忽略它,或者如何在图片末尾没有时髦的“7c44 ...”字符串的情况下提供链接名称或替代名称。

有没有办法解决这个问题?

【问题讨论】:

    标签: ruby-on-rails-4 rspec asset-pipeline rspec2


    【解决方案1】:

    假设 have_selector 可以只使用一个 CSS 选择器,你应该能够执行以下操作

    response.should have_selector('img[alt^="can-logo-"][src^="/assets/can-logo-"][src$=".png"]')
    

    【讨论】:

    • 它没有用。我得到了 Nokogiri::CSS::SyntaxError: unexpected '/' after 'prefix_match' 错误。
    • have_selector 的参数是否应该是 Ruby 正则表达式?
    • 对不起,我遗漏了可能需要的引号 - 更新了答案。假设您使用的 have_selector 来自 Webrat,我认为它不需要正则表达式,因为它将它转换为 XPath。不过我可能错了,我已经有一段时间没有使用 webrat了
    • 呵呵呵呵——好的——这两个工具的设计目的基本上是做同样的事情,但是 Capybaras have_selector 不采用 :alt 或 :src 选项,所以我猜在那个测试中你实际上正在使用webrat have_selector。根据您现在遇到的确切错误,也许尝试更新 nokogiri - Nokogiri::CSS.parse('img[alt^="can-logo-"][src^="/assets/can-logo-"] [src$=".png"]') - 这就是 webrat 所做的,对我来说解析得很好(它确实因上面没有引号的错误而失败)
    • 好的——我发布的是 CSS 语法——不是 XPath——(内部 webrat 将其转换为 XPath)只要它对你有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    相关资源
    最近更新 更多