Я пробираюсь по учебнику Rails Tutorial от Hartl, и я полностью застрял на одном из тестов. Тест (справа от книги) очень прост:
require 'spec_helper'
describe UsersController do
render_views
describe "GET 'show'" do
before(:each) do
@user = Factory(:user)
end
...
it "should include the user's name" do
get :show, :id => @user
response.should have_selector('h1', :content => @user.name)
end
end
Тест не пройден со следующей ошибкой:
UsersController GET 'show' should include the user's name
Failure/Error: response.should have_selector('h1', :content => @user.name)
expected following output to contain a <h1>Steve T</h1> tag:...
Страница правильно отображается в браузере. Вот отрывок из исходного кода HTML, представленного браузером:
<section class="round"><br>
<h1>
<img alt="Steve T" class="gravatar" src="http://gravatar.com/..." />
Steve T
</h1>
</section>
Я даже могу добавить вызов: print response.body
в спецификации контроллера, и он будет правильно выводить теги.
Есть идеи, что я могу делать не так?
ОБНОВЛЕНИЕ - Похоже, мы определили потенциально важный элемент: HTML-код в сообщении об ошибке теста rspec не содержит тега body, который находится внутри него.
1) UsersController GET 'show' should include the user's name Failure/Error: response.should have_selector('h1', :content => @user.name) expected following output to contain a <h1>Steve T</h1> tag: <!DOCTYPE html> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>Ruby on Rails Tutorial Sample App | Steve T</title> </head></html> # ./spec/controllers/users_controller_spec.rb:33:in block (3 levels) in <top (required)>'
Кто-нибудь знает, почему, если страница в браузере содержит теги <body>
и внутреннее содержимое, и если print response.body
показывает содержимое, почему сообщение об ошибке пропускает его?