Ruby on rails RSpec和Capybara:如何让文本具有_css:忽略文本中的换行符

Ruby on rails RSpec和Capybara:如何让文本具有_css:忽略文本中的换行符,ruby-on-rails,rspec,capybara,Ruby On Rails,Rspec,Capybara,我刚刚将Rails应用程序从Rails 5升级到了Rails 6 现在,以下断言不再有效: expect(page).to have_css '.active a', text: "Reports (1)- current menu item" 错误: expected to find visible css ".active a" with text "Reports (1) - current menu item" within

我刚刚将Rails应用程序从Rails 5升级到了Rails 6

现在,以下断言不再有效:

expect(page).to have_css '.active a', text: "Reports (1)- current menu item"
错误:

expected to find visible css ".active a" with text "Reports (1) - current menu item" within #<Capybara::Node::Element tag="div" path="/HTML/BODY[1]/MAIN[1]/DIV[1]/DIV[1]/DIV[1]/DIV[2]"> but there were no matches. Also found "Reports (1)\n- current menu item", which matched the selector but not all filters.

但我觉得很奇怪。有人能告诉我这里有什么新情况,以及如何处理这种情况吗?谢谢。

从第3版开始,Capybara尝试匹配显示的文本-这意味着如果显示的文本中包含
,或者部分包装在块元素中,等等。那么文本中将包含换行符

如何应对这种情况取决于你在做什么。默认情况下,
text
选项与子字符串匹配,因此如果您不真正关心全文,可以这样做

expect(page).to have_css('.active a', text: 'current menu item')
您还可以为
text
选项指定regexp

expect(page).to have_css('.active a', text: /Reports (\d+)/)

或者,如您所示,您可以添加\n以验证显示的文本

不确定升级之前使用的是哪个版本,但3.0.0中引入的版本似乎就是您所指的版本。“可视文本空白不再完全规范化,更符合可视文本的WebDriver规范”谢谢,这很有趣,这很有趣。我必须查看是否对某些包含的文本元素使用了
display:block
expect(page).to have_css('.active a', text: /Reports (\d+)/)