Rails 教程 - Ch. 5 更漂亮的测试 Rspec

Posted

技术标签:

【中文标题】Rails 教程 - Ch. 5 更漂亮的测试 Rspec【英文标题】:Rails Tutorial - Ch. 5 Prettier Tests Rspec 【发布时间】:2012-08-26 11:25:08 【问题描述】:

我真的希望有人可以帮助我解决这个问题。我正在关注 Michael Hartl 的 Rails 3 教程,并且在第 5 章遇到了困难。我昨天大部分时间都在尝试通过回顾所有工作来解决这个问题,并解决了 Stack Overflow 上的所有相关问题。那里有大量信息,但都没有解决我的问题,老实说,我不明白我哪里出错了。

一切都进行得很顺利(网站的工作方式完全按照书中的说明运行),直到作者引导您完成“static_pages_spec.rb”文件的清理工作。我的目前处于这种状态:


require 'spec_helper'

describe "Static pages" do

subject  page 

describe "Home page" do
  before  visit root_path 

  it  should have_selector('h1',    text: 'Sample App') 
  it  should have_selector('title', text: full_title('')) 
  it  should_not have_selector 'title', text: '| Home' 
end

describe "Help page" do
  before  visit help_path 

  it  should have_selector('h1',    text: 'Help') 
  it  should have_selector('title', text: full_title('Help')) 
end

describe "About page" do
  before  visit about_path 

  it  should have_selector('h1',    text: 'About') 
  it  should have_selector('title', text: full_title('About Us')) 
end

describe "Contact page" do
  before  visit contact_path 

  it  should have_selector('h1',    text: 'Contact') 
  it  should have_selector('title', text: full_title('Contact')) 
end
end

我也有两个'spec/support/utilities.rb'文件,如作者所述:


def full_title(page_title)
base_title = "Ruby on Rails Tutorial Sample App"
if page_title.empty?
  base_title
else
  "#base_title | #page_title"
end

结束

以及'app/helpers/application_helper.rb'中的以下内容


module ApplicationHelper

#Returns the full title based on a per-page basis.
def full_title(page_title)
base_title = "Ruby on Rails Tutorial Sample App"
if page_title.empty?
  base_title
else
  "#base_title | #page_title"
end
end

结束

当我运行 'guard' 时(我已经完成了 Guard、Spork 等的设置),我遇到以下三个失败:

1) 静态页面帮助页面 失败/错误:它 should have_selector('title', text: full_title('Help')) 预期 css“标题”和文本“Ruby on Rails 教程示例应用程序 | 帮助”返回 >something # ./spec/requests/static_pages_spec.rb:19:in `block (3 levels) in '

2) 静态页面 关于页面 失败/错误:它 should have_selector('title', text: full_title('About Us')) 预期 css “title” 和文本 “Ruby on Rails Tutorial Sample App | About Us” > 返回一些东西 # ./spec/requests/static_pages_spec.rb:26:in `block (3 levels) in '

3) 静态页面 联系页面 失败/错误:它 should have_selector('title', text: full_title('Contact')) 预期 css “title” 和文本 “Ruby on Rails Tutorial Sample App | Contact” 以 >return 一些东西 # ./spec/requests/static_pages_spec.rb:33:in `block (3 levels) in '

该站点工作正常(路由似乎是正确的),但我确实注意到,如果我查看任何页面的源代码,:title 始终是“Ruby on Rails 教程示例应用程序”。 ' | :page_title ' 似乎没有放在前面。我只是找不到我做了什么来打破它,因为我的 rspec 测试在本书的早期阶段工作。

我看到了一堆这样的问题,那些试图提供帮助的人请求访问 GitHub 上的代码。为了快速找到我的错误,我将所有代码都放在那里:

https://github.com/rbrowndev/sampleapp.git

https://github.com/rbrowndev/sampleapp/tree/filling-in-layout

由于我是新手,如果存储库未正确配置以允许您克隆项目,请告诉我。我相信我是这样设置的,但由于我是新手...

如果有人可以提供帮助,将不胜感激。如果您愿意我在 SO 上而不是在 GitHub 上发布更多源代码,请告诉我。

谢谢。

【问题讨论】:

【参考方案1】:

有一个错误使我们无法检查标题字段中的文本(实际上,它是任何不可见的内容): https://github.com/jnicklas/capybara/issues/844

到目前为止,这似乎是在我们的规范中启用检查标题文本的最佳方式: https://***.com/a/13755730/359957

【讨论】:

以上是关于Rails 教程 - Ch. 5 更漂亮的测试 Rspec的主要内容,如果未能解决你的问题,请参考以下文章

CH2 Hartl 教程迁移正在等待。要解决此问题,请运行: bin/rake db:migrate RAILS_ENV=development

如何使用 twitter bootstrap by rails framework 显示漂亮的错误消息?

ruby 2.5 是不是已经用 Rails 4.2 测试过?

使用 AWS Elastic Beanstalk 部署 Rails ActionCable

Rails/Ajax 在提交后将表单从创建更改为更新

如何解决 Arel 与 Hartl Rails 教程(第 2 章)不兼容的问题?