Здравствуйте, записался на курс. При этом ставил галочку на "обучаться с тьютором". На email пришло письмо, о том, что записался на самостоятельное изучение курса. Как выбрать тьютора? |
Опубликован: 27.01.2016 | Уровень: для всех | Доступ: платный
Лекция 5:
Заполнение шаблона
Заключение
В этой главе мы привели шаблон нашего приложение в чувство и отполировали маршруты. Остальная часть книги посвящена конкретизации примера приложения: во-первых, путем добавления пользователей, которые могут зарегистрироваться, войти в систему и выйти; затем добавлением пользовательских микросообщений и, наконец, добавлением возможности следить за микросообщениями других пользователей.
Если вы используете Git, вам следует объединить изменения с мастер-веткой:
$ git add . $ git commit -m "Finish layout and routes" $ git checkout master $ git merge filling-in-layout
Также вы можете отправить изменения на GitHub:
$ git push
Наконец, вы можете развернуть приложение на Heroku:
$ git push heroku
Результатом должно стать работающий пример приложения на продакшен сервере:
$ heroku open
Если столкнулись с проблемами, попробуйте выполнить
$ heroku logs
чтобы узнать об ошибках с помощью логов Heroku.
Упражнения
- Мы видели в Разделе 5.3 что Rspec-матчер have_content иногда работает слишком общО что приводит нас к временному закомментированию строки "Contact" в футере во избежание ошибочно-проходящего теста (Листинг 5.18). Для того чтобы исправить это Листинг 5.38 вводит предоставляемый Capybara метод have_selector который позволяет нам тестировать наличие отдельных HTML тегов. Удаляя и возвращая на место "Contact" h1 в Листинге 5.21, убедитесь что код в Листинге 5.38 выдает провальный тест даже если подвал не закомментирован.
- Код для тестирования статических страниц в Листинге 5.30 компактен, но по прежнему имеет повторения. RSpec поддерживает возможность называемую shared examples предназначенную для устранения такого вида дублирования. Следуя примеру в Листинге 5.39, заполните пропущенные тесты для страниц Help, About и Contact. Обратите внимание - команда let кратко обсуждаемая в Листинге 3.31, создает локальную переменную с данным значением по запросу (т.е. при использовании переменной), в отличие от переменной экземпляра, которая создается в момент назначения. (Листинг 5.39 также использует have_selector из Листинга 5.38.)
- Возможно вы заметили что наши тесты для ссылок шаблона тестируют маршруты, но на самом деле не проверяют, ведут ли ссылки к правильным страницам. Один из способов реализации этих испытаний заключается в использовании visit и click_link внутри RSpec интеграционного теста. Дополните код из Листинга 5.40 чтобы проверить что все ссылки шаблона правильно определены.
- Устраните необходимость в тестовом хелпере full_title в Листинге 5.29 написав тест для оригинального вспомогательного метода, как это показано в Листинге 5.41. (Вам необходимо будет создать директорию spec/helpers и файл application_helper_spec.rb.) Затем include его в тест с помощью кода в Листинге 5.42. Проверьте, запустив тесты, что новый код работает. Примечание: Листинг 5.41 использует регулярные выражения о которых мы узнаем больше в Разделе 6.2.4. (Спасибо Alex Chaffee за совет и код используемый в этом упражнении.)
require 'spec_helper' describe "Static pages" do . . . describe "Contact page" do before { visit contact_path } it { should have_selector('h1', text: 'Contact') } it { should have_title(full_title('Contact')) } end endЛистинг 5.38. Более основательный тест для страницы Contact. spec/requests/static_pages_spec.rb
require 'spec_helper' describe "Static pages" do subject { page } shared_examples_for "all static pages" do it { should have_selector('h1', text: heading) } it { should have_title(full_title(page_title)) } end describe "Home page" do before { visit root_path } let(:heading) { 'Sample App' } let(:page_title) { '' } it_should_behave_like "all static pages" it { should_not have_title('| Home') } end describe "Help page" do . . . end describe "About page" do . . . end describe "Contact page" do . . . end endЛистинг 5.39. Применение RSpec shared example для устранения дублирования в тестах. spec/requests/static_pages_spec.rb
require 'spec_helper' describe "Static pages" do . . . it "should have the right links on the layout" do visit root_path click_link "About" expect(page).to have_title(full_title('About Us')) click_link "Help" expect(page).to # заполнить click_link "Contact" expect(page).to # заполнить click_link "Home" click_link "Sign up now!" expect(page).to # заполнить click_link "sample app" expect(page).to # заполнить end endЛистинг 5.40. Тест для ссылок в шаблоне. spec/requests/static_pages_spec.rb
require 'spec_helper' describe ApplicationHelper do describe "full_title" do it "should include the page title" do expect(full_title("foo")).to match(/foo/) end it "should include the base title" do expect(full_title("foo")).to match(/^Ruby on Rails Tutorial Sample App/) end it "should not include a bar for the home page" do expect(full_title("")).not_to match(/\|/) end end endЛистинг 5.41. Тесты для хелпера full_title из application_helper.rb. spec/helpers/application_helper_spec.rb
include ApplicationHelperЛистинг 5.42. Замена тестового хелпера full_title на простой include. spec/support/utilities.rb