我预期这段代码会返回红色,因为视图的标题部分计算为"Home \ Rails教程示例应用程序“。但事实上,格林被归还了。另一方面,规范所期望的视图的标题部分是“Rails教程示例应用程序”。我不知道为什么会这样。
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
发布于 2020-02-23 05:32:24
凯巴拉RSpec matcher #have_title
使用的是凯巴拉的#assert_title
罩下(来源)。
来自博士
#assert_title(字符串,**选项)⇒true 参数:
string (String)
-标题应该包括的字符串注意,意思是“包括”。如果你想要一个精确的匹配,那就有一个选择。从医生那里:
(**
**options
**): 选项哈希
:exact (Boolean)
-默认:false
-当传递一个字符串时,匹配应该是精确的,或者只是子字符串。由于RSpec匹配器只是将选项传递给这个#assert_title
方法,所以您应该能够按如下方式编写期望(不需要#to_s
,因为@base_title
是一个字符串):
expect(page).to have_title(@base_title, exact: true)
发布于 2020-02-23 05:29:38
这是因为have_title
的默认行为是执行子字符串匹配- 标题%3F。
如果你想要一个精确的匹配,通过exact: true
expect(页面).to have_title(@base_title.to_s,确切: true)
https://stackoverflow.com/questions/60362233
复制