【问题标题】:Why RSpecMatchers#have_title return code is green ? in my product为什么 RSpecMatchers#have_title 返回码是绿色的?在我的产品中
【发布时间】:2020-02-23 12:34:35
【问题描述】:

我希望这段代码返回红色,因为视图的标题部分计算为“主页 | Ruby on Rails 教程示例应用程序”。但实际上,绿色被退回了。 另一方面,规范所期望的视图的标题部分是“Ruby on Rails Tutorial Sample App”。我不知道为什么会这样。

application.html.haml 是常见的布局。

!!! 5
%html
  %head
    %title 
      = full_title(yield(:title))
    = csrf_meta_tags
    = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
    = javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
  %body
    = yield

home.html.haml 是视图内容

= provide(:title, "Home")
%h1 Sample App
%p
  This is the home page for the
  %a{href: 'https://railstutorial.jp/'} Ruby on Rails Tutorial
  sample application.
module ApplicationHelper
  def full_title(page_title = '')
    base_title = 'Ruby on Rails Tutorial Sample App'
    base_title if page_title.empty?

    page_title + ' | ' + base_title
  end
end

规格代码

RSpec.describe 'static_controller', type: :system do
  before do
    @base_title = 'Ruby on Rails Tutorial Sample App'
  end
  describe 'Home' do
    it 'check title' do
      visit root_url
      expect(page).to have_title @base_title.to_s
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails capybara rspec-rails


    【解决方案1】:

    Capybara RSpec 匹配器 #have_title 在底层使用 Capybara 的 #assert_title (source)。

    来自#assert_title's docs

    #assert_title(string, **options) ⇒ true
    

    参数:

    • string (String) — 标题应包含的字符串

    请注意,上面写着“包含”。如果您想要完全匹配,则可以选择。来自文档:

    选项哈希 (**options):

    • :exact (Boolean) — 默认值:false — 当传递一个字符串时,匹配应该是精确的还是只是子字符串

    由于 RSpec 匹配器只是将选项传递给这个 #assert_title 方法,你应该能够编写如下期望(不需要 #to_s,因为 @base_title 是一个字符串):

    expect(page).to have_title(@base_title, exact: true)
    

    【讨论】:

      【解决方案2】:

      这是因为 have_title 的默认行为是进行子字符串匹配 - https://www.rubydoc.info/github/teamcapybara/capybara/Capybara/Node/DocumentMatchers:has_title%3F

      如果您想要精确匹配通过exact: true

      expect(page).to have_title(@base_title.to_s, exact: true)

      【讨论】:

        猜你喜欢
        • 2012-07-30
        • 1970-01-01
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多