我有这个错误,我一直在进入迈克尔哈特尔的ror教程。是的,我在谷歌上搜索了这个问题,看到它被回答了几次。我尝试了提供的解决方案,但他们没有解决问题错误如下:

ec2-user:~/environment/sample_app (static-pages) $ rails test
Running via Spring preloader in process 16202
Run options: --seed 53019

# Running:

F

Failure:
StaticPagesControllerTest#test_should_get_about [/home/ec2-


user/environment/sample_app/test/controllers/
static_pages_controller_test.rb:20]:
Expected at least 1 element matching "title", found 0..
Expected 0 to be >= 1.


bin/rails test test/controllers/static_pages_controller_test.rb:17

F

Failure:
StaticPagesControllerTest#test_should_get_home [/home/ec2-
user/environment/sample_app/test/controllers/
static_pages_controller_test.rb:8]:
Expected at least 1 element matching "title", found 0..
Expected 0 to be >= 1.


bin/rails test test/controllers/static_pages_controller_test.rb:5

F

Failure:
StaticPagesControllerTest#test_should_get_help [/home/ec2-
user/environment/sample_app/test/controllers/
static_pages_controller_test.rb:14]:
Expected at least 1 element matching "title", found 0..
Expected 0 to be >= 1.


bin/rails test test/controllers/static_pages_controller_test.rb:11



Finished in 0.171213s, 17.5220 runs/s, 35.0441 assertions/s.
3 runs, 6 assertions, 3 failures, 0 errors, 0 skips

所以它试图显示的内容和输入的内容有误。我明白这一点但从字面上看,我的代码是这样写的。我完全照搬了那本书。
这是我的静态页面控制器测试代码。
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

test "should get home" do
get static_pages_home_url
assert_response :success
assert_select "title", "Home | Ruby on Rails Tutorial Sample App."
end

test "should get help" do
get static_pages_help_url
assert_response :success
assert_select "title", "Help | Ruby on Rails Tutorial Sample App."
end

test "should get about" do
get static_pages_about_url
assert_response :success
assert_select "title", "About | Ruby on Rails Tutorial Sample App."
end


end

这是我的applications.html.erb代码:
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

所以我很困惑为什么这不起作用。另一篇文章的一个答案暗示,这与帮助没有html的东西有关。但我的是。有人知道这里发生了什么。我在用cloud9 IDE。
谢谢,

编辑1:更新
这是我的家,帮助,和关于HTML代码。家庭:
<% provide(:title, "Home") %>

<h1>Sample App</h1>

<p>This is the home page for the
<a href="http://www.railstutorial.org/">Ruby on Rails</a>
sample application
</p>

帮助
<% provide(:title, "Help") %>
<h1>Help</h1>

<p>
Get help on the Ruby on Rails Tutorial at the
<a href="http://www.railstutorial.org/help">Rails Tutorial help section</a>.
To get help on this sample app, see the
<a href="http://www.railstutorial.org/book"><em>Ruby on Rails Tutorial</em>
book</a>.
</p>

关于:
<% provide(:title, "About") %>

<h1>About</h1>

<p>
The <a href="http://www.railstutorial.org/"><em>Ruby on Rails
Tutorial</em></a> is a
<a href="http://www.railstutorial.org/book">book</a> and
<a href="http://screencasts.railstutorial.org/">screencast series</a>
to teach web development with
<a href="http://rubyonrails.org/">Ruby on Rails</a>.
This is the sample application for the tutorial.
</p>

要回答下面的问题,此代码尚未推送到回购协议中在发布之前,我将在本地托管它(并测试它)。当我在本地浏览器中查看它时,页面会正常工作,但标题(浏览器顶部的选项卡)不会填充很明显,title函数不起作用。
Upadate 2:添加routes.rb
Rails.application.routes.draw do

root 'static_pages#home'
get 'static_pages/home'
get 'static_pages/help'
get 'static_pages/about'
get 'static_pages/contact'

# For details on the DSL available within this file, see
http://guides.rubyonrails.org/routing.html

# root 'application#hello'

end

最佳答案

我在学习Rails时也遇到了同样的问题,但我在另一篇StackOverflow文章中找到了答案。
provide将标记块存储在标识符中供以后使用在本例中,符号中的“帮助”:titleprovide包含在<% %>中,表示它正在执行此代码,而没有在视图中打印出来。
yield在这种情况下,只需把那个块吐出来收益率包含在<%= %>中,表示它正在打印到视图中。
把它想象成设置一个变量并打印出一个变量。
有关详细信息,请参见:http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-provide请注意,provide实际上是内容的包装器,所以好的东西就在这个链接中。
本文摘自StackOverflow文章:yield and provide() inside template

09-15 21:24