Руководство по ruby ​​on rails - rails 3.0, глава 11 rspec завершается ошибкой после перечисления кода 11.27 - PullRequest
2 голосов
/ 31 января 2011

Я пробежал книгу. Я запускаю «rspec spec /» после каждого шага.

Глава 11 не запускается в списке 11.27 при добавлении app / views / pages / home.html.erb После листинга 11.30. Добавление переменной экземпляра микросообщения к домашнему действию. приложение / контроллеры / pages_controller.rb

Все должно работать. Это не так. Я просто в первый раз копаюсь в рельсах. так как это было вырезано и вставлено в код, я не ожидал ошибок.

Буду благодарен за любую помощь в склонении к отладке. Выясните, если я неправильно вырезал и вставлял код или пример кода Мишеля не был полностью протестирован.

Вот вывод rspec:

MPECHNER-MBP: sample_app michael.pechner $ rspec spec / ..FF ............................................... .............................................. FF ... .

Неудачи:

1) Ошибка «создать» POST MicropostsController не должна создавать микросообщение Ошибка / Ошибка: post: create,: micropost => @attr ActionView :: Template :: Ошибка: У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр ActiveRecord :: Base. Произошла ошибка при оценке nil.errors # ./app/views/shared/_error_messages.html.erb:1:in _app_views_shared__error_messages_html_erb___2864847557408089106_2179824440__3563936241835894680' # ./app/views/shared/_micropost_form.html.erb:2:in блок в _app_views_shared__micropost_form_html_erb_ 732794408121469484_2179844600__1418926388395345268 ' # ./app/views/shared/_micropost_form.html.erb:1:in _app_views_shared__micropost_form_html_erb___732794408121469484_2179844600__1418926388395345268' # ./app/views/pages/home.html.erb:6:in _app_views_pages_home_html_erb _1781066003698849377_2179862020__1594538359887050056 ' # ./app/controllers/microposts_controller.rb:10:in create' # ./spec/controllers/microposts_controller_spec.rb:34:in блок (5 уровней) в ' # ./spec/controllers/microposts_controller_spec.rb:33:in `блок (4 уровня) в '

2) Ошибка POST 'create' в MicropostsController должна отображать домашнюю страницу Ошибка / Ошибка: post: create,: micropost => @attr ActionView :: Template :: Ошибка: У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр ActiveRecord :: Base. Произошла ошибка при оценке nil.errors # ./app/views/shared/_error_messages.html.erb:1:in _app_views_shared__error_messages_html_erb___2864847557408089106_2179824440__3563936241835894680' # ./app/views/shared/_micropost_form.html.erb:2:in блок в _app_views_shared__micropost_form_html_erb_ 732794408121469484_2179844600__1418926388395345268 ' # ./app/views/shared/_micropost_form.html.erb:1:in _app_views_shared__micropost_form_html_erb___732794408121469484_2179844600__1418926388395345268' # ./app/views/pages/home.html.erb:6:in _app_views_pages_home_html_erb _1781066003698849377_2179862020__1594538359887050056 ' # ./app/controllers/microposts_controller.rb:10:in create' # ./spec/controllers/microposts_controller_spec.rb:39:in блок (4 уровня) в '

3) LayoutLinks при входе в систему должна иметь ссылку для выхода Ошибка / Ошибка: посетите root_path ActionView :: Template :: Ошибка: У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр ActiveRecord :: Base. Произошла ошибка при оценке nil.errors # ./app/views/shared/_error_messages.html.erb:1:in _app_views_shared__error_messages_html_erb___2864847557408089106_2179824440__3563936241835894680' # ./app/views/shared/_micropost_form.html.erb:2:in блок в _app_views_shared__micropost_form_html_erb_ 732794408121469484_2179844600__1418926388395345268 ' # ./app/views/shared/_micropost_form.html.erb:1:in _app_views_shared__micropost_form_html_erb___732794408121469484_2179844600__1418926388395345268' # ./app/views/pages/home.html.erb:6:in _app_views_pages_home_html_erb _1781066003698849377_2179862020__1594538359887050056 ' #: 10: в synchronize' # ./spec/requests/layout_links_spec.rb:51:in блоке (3 уровня) в '

4) LayoutLinks при входе должен иметь ссылку на профиль Ошибка / Ошибка: посетите root_path ActionView :: Template :: Ошибка: У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр ActiveRecord :: Base. Произошла ошибка при оценке nil.errors # ./app/views/shared/_error_messages.html.erb:1:in _app_views_shared__error_messages_html_erb___2864847557408089106_2179824440__3563936241835894680' # ./app/views/shared/_micropost_form.html.erb:2:in блок в _app_views_shared__micropost_form_html_erb_ 732794408121469484_2179844600__1418926388395345268 ' # ./app/views/shared/_micropost_form.html.erb:1:in _app_views_shared__micropost_form_html_erb___732794408121469484_2179844600__1418926388395345268' # ./app/views/pages/home.html.erb:6:in _app_views_pages_home_html_erb _1781066003698849377_2179862020__1594538359887050056 ' #: 10: в synchronize' # ./spec/requests/layout_links_spec.rb:57:in блоке (3 уровня) в '

Завершено за 2,04 секунды. 103 примера, 4 неудачи MPECHNER-MBP: sample_app michael.pechner $

Ответы [ 2 ]

8 голосов
/ 31 января 2011

Я искал в git hub другие, которые прошли через это.Я обнаружил это в сообщении https://github.com/mfmcgran "app / views / shared / _error_messages.html.erb", похоже, неверно. Код, который я показал в первой строке как if if users.errors.any?объявление должно быть "если object.errors.any?"В главе 11 не упоминалось, что это нужно изменить.Но после этого изменения все 103 теста rpsec прошли.

0 голосов
/ 24 апреля 2011

Учебное пособие стало немного старше (учитывая скорость, с которой выпускаются версии гемов).Я считаю, что это действительно удобно, если вы просто обновитесь до последней версии rspec и используете вместо этого

gem 'capybara'

в вашем Gemfile и

gem 'capybara/rspec'

в вашем spec_helper.rb и запустите

bundle install

это должно сработать

click_link 'About'
page.should have_content("About")
# in place of
# enter code here`response.should have_selector('title', :content => "Contact")

это также будет продолжаться

get '/about'
response.should have_selector('title', :content => "About")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...