2 votes

Ruby on Rail Chapitre 3 Erreur de Michael Hartl

Je reçois cette erreur de manière récurrente dans le tutoriel RoR de Michael Hartl. Oui, j'ai cherché sur Google cette question et j'ai vu qu'elle avait été répondue plusieurs fois. J'ai essayé les solutions proposées et elles n'ont pas résolu le problème. Voici l'erreur :

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

Il y a une incompréhension quant à ce qui est essayé d'afficher et ce que l'entrée est. Je comprends cette partie. Mais littéralement, mon code est supposé fonctionner. J'ai copié exactement ce qui était dans le livre..

Voici mon code pour static_pages_controller_test.rb :

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

Voici mon code pour applications.html.erb :

    <%= yield(:title) %> | Ruby on Rails Tutorial Sample App
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

    <%= yield %>

Je suis donc très confus pourquoi cela ne fonctionne pas. Une réponse d'un autre post a suggéré que cela avait à voir avec quelque chose lié à Help n'ayant pas de balise html.. mais le mien en a. Est-ce que quelqu'un voit ce qui se passe ici. J'utilise l'IDE cloud9.

Merci, Ben

EDIT 1: Mise à jour

Voici mon code pour home, help et about html. Home :

<% provide(:title, "Home") %>

Sample App

Il s'agit de la page d'accueil de l'application exemple
Ruby on Rails

Help :

<% provide(:title, "Help") %>
Help

Obtenez de l'aide sur le Tutoriel Ruby on Rails sur la
section d'aide Rails Tutorial.
Pour obtenir de l'aide sur cette application exemple, consultez le
Tutoriel Ruby on Rails
livre.

About :

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

About

Le Tutoriel Ruby on Rails est un
livre et
une série de screencasts
pour apprendre le développement web avec
Ruby on Rails.
Il s'agit de l'application exemple pour le tutoriel.

Pour répondre aux questions ci-dessous, ce code n'a pas encore été poussé sur le repo. Je l'héberge localement (et le test) avant de le poster. Lorsque je le regarde dans le navigateur local, les pages fonctionnent, mais le titre (l'onglet en haut du navigateur) n'est pas rempli. Il est donc clair que la fonction de titre ne fonctionne pas.

Mise à jour 2: Routes.rb ajouté

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'

# Pour plus de détails sur le DSL disponible dans ce fichier, voir http://guides.rubyonrails.org/routing.html

# root 'application#hello'

end

0voto

kyrex Points 1

J'ai également rencontré le même problème en étudiant Rails, mais j'ai trouvé la réponse dans un autre article StackOverflow.

provide stocke un bloc de balisage dans un identificateur pour une utilisation ultérieure. Dans ce cas, 'Help' dans le symbole :title. Le provide est encadré dans <% %> pour indiquer qu'il exécute ce code et ne l'imprime pas dans la vue.

yield dans ce cas se contente de renvoyer ce bloc. Le yield est encadré dans <%= %> pour indiquer qu'il est imprimé dans la vue.

Pensez à définir une variable et à l'imprimer.

Voir : http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-provide pour plus d'informations. Notez que provide est vraiment une enveloppe pour content_for, c'est donc là que se trouvent les bonnes infos dans ce lien.

Ceci est tiré de cet article StackOverflow : yield and provide() inside template

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X