BogoToBogo
  • Home
  • About
  • Big Data
  • Machine Learning
  • AngularJS
  • Python
  • C++
  • go
  • DevOps
  • Kubernetes
  • Algorithms
  • More...
    • Qt 5
    • Linux
    • FFmpeg
    • Matlab
    • Django 1.8
    • Ruby On Rails
    • HTML5 & CSS

Simple App IV (TDD - Dynamic Pages) 2020

RubyOnRails_logo




Bookmark and Share





bogotobogo.com site search:






Note

We've made Home and Help page using rails generate command in the previous chapter (Simple_app II - TDD (Home/Help)) and About page (Simple_app III - TDD (About page)). In the chapter, we'll convert static pages into dynamic pages.





Testing a title change

We'll start by writing tests for the titles, then add the titles themselves, and finally use a layout file to refactor the resulting pages and eliminate duplication.

users table:


Page URL Base title Variable title
Home /static_pages/home "Ruby on Rails Tutorial Simple App" "Home"
Help /static_pages/help "Ruby on Rails Tutorial Simple App" "Help"
About /static_pages/about "Ruby on Rails Tutorial Simple App" "About"

By the end of this section, all three of our static pages will have titles of the form "Ruby on Rails Tutorial Simple App | Home", "Ruby on Rails Tutorial Simple App | Help", and "Ruby on Rails Tutorial Simple App | About".

We'll build on the tests in spec/requests/static_pages_spec.rb:

require 'spec_helper'

describe "Static pages" do

  describe "Home page" do

    it "should have the content 'Simple App'" do
      visit '/static_pages/home'
      expect(page).to have_content('Simple App')
    end
  end

  describe "Help page" do

    it "should have the content 'Help'" do
      visit '/static_pages/help'
      expect(page).to have_content('Help')
    end
  end

  describe "About page" do

    it "should have the content 'About Us'" do
      visit '/static_pages/about'
      expect(page).to have_content('About Us')
    end
  end
end

We'll add title tests following the model in the table above.





Testing a title change - Adding new tests

spec/requests/static_pages_spec.rb:

it "should have the right title" do
  visit '/static_pages/home'
  expect(page).to have_title("Ruby on Rails Tutorial Simple App | Home")
end

This uses the have_title method, which checks for an HTML title with the given content. The code checks to see that the content inside the title tag is:

"Ruby on Rails Tutorial Simple App | Home"

The content do not have to be an exact match; any substring works as well, such as this:

expect(page).to have_title("Home")

Adding new tests for each of our three static pages, gives us our new StaticPages test (spec/requests/static_pages_spec.rb):

require 'spec_helper'

describe "Static pages" do

  describe "Home page" do

    it "should have the content 'Simple App'" do
      visit '/static_pages/home'
      expect(page).to have_content('Simple App')
    end

    it "should have the title 'Home'" do
      visit '/static_pages/home'
      expect(page).to have_title("Ruby on Rails Tutorial Simple App | Home")
    end
  end

  describe "Help page" do

    it "should have the content 'Help'" do
      visit '/static_pages/help'
      expect(page).to have_content('Help')
    end

    it "should have the title 'Help'" do
      visit '/static_pages/help'
      expect(page).to have_title("Ruby on Rails Tutorial Simple App | Help")
    end
  end

  describe "About page" do

    it "should have the content 'About Us'" do
      visit '/static_pages/about'
      expect(page).to have_content('About Us')
    end

    it "should have the title 'About Us'" do
      visit '/static_pages/about'
      expect(page).to have_title("Ruby on Rails Tutorial Simple App | About Us")
    end
  end
end

If we run:

$ bundle exec rspec spec/requests/static_pages_spec.rb

We'll get message for failed tests.





Testing a title change - Passing tests

The view for the Home page (app/views/static_pages/home.html.erb):

<!DOCTYPE html>
<html>
  <head>
    <title>Ruby on Rails Tutorial Simple App | Home</title>
  </head>
  <body>
    <h1>Simple App</h1>
    <p>
      This is the home page for the
      <a href="http://www.bogotobogo.com/RubyOnRails/RubyOnRails.php">Ruby on Rails Tutorial</a>
      simple application.
    </p>
  </body>
</html>

Note that we're using <title>Ruby on Rails Tutorial Simple App | Home</title> for a new title.



The view for the Help page (app/views/static_pages/help.html.erb):

<!DOCTYPE html>
<html>
  <head>
    <title>Ruby on Rails Tutorial Simple App | Help</title>
  </head>
  <body>
    <h1>Help</h1>
    <p>
      Get help on the Ruby on Rails Tutorial at the
      <a href="http://www.bogotobogo.com/RubyOnRails/RubyOnRails.php">Rails Tutorial help page</a>.
    </p>
  </body>
</html>


The view for the Help page (app/views/static_pages/about.html.erb):

<html>
  <head>
    <title>Ruby on Rails Tutorial Simple App | About Us</title>
  </head>
  <body>
    <h1>About Us</h1>
    <p>
      The <a href="http://www.bogotobogo.com/RubyOnRails/RubyOnRails.php">Ruby on Rails Tutorial</a>
      is a project to make a book and screencasts to teach web development
      with <a href="http://www.bogotobogo.com/RubyOnRails/RubyOnRails.php">Ruby on Rails</a>. This
      is the simple application for the tutorial.
    </p>
  </body>
</html>


If we run:

$ bundle exec rspec spec/requests/static_pages_spec.rb

we pass the test.

......
Finished in 0.56164 seconds
6 examples, 0 failures

Randomized with seed 52439








Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization

YouTubeMy YouTube channel

Sponsor Open Source development activities and free contents for everyone.

Thank you.

- K Hong






Sponsor Open Source development activities and free contents for everyone.

Thank you.

- K Hong







Ruby on Rails



Ruby On Rails Home

Ruby - Input/Output, Objects, Load

Ruby - Condition (if), Operators (comparison/logical) & case statement

Ruby - loop, while, until, for, each, (..)

Ruby - Functions

Ruby - Exceptions (raise/rescue)

Ruby - Strings (single quote vs double quote, multiline string - EOM, concatenation, substring, include, index, strip, justification, chop, chomp, split)

Ruby - Class and Instance Variables

Ruby - Class and Instance Variables II

Ruby - Modules

Ruby - Iterator : each

Ruby - Symbols (:)

Ruby - Hashes (aka associative arrays, maps, or dictionaries)

Ruby - Arrays

Ruby - Enumerables

Ruby - Filess

Ruby - code blocks and yield

Rails - Embedded Ruby (ERb) and Rails html

Rails - Partial template

Rails - HTML Helpers (link_to, imag_tag, and form_for)

Layouts and Rendering I - yield, content_for, content_for?

Layouts and Rendering II - asset tag helpers, stylesheet_link_tag, javascript_include_tag

Rails Project

Rails - Hello World

Rails - MVC and ActionController

Rails - Parameters (hash, array, JSON, routing, and strong parameter)

Filters and controller actions - before_action, skip_before_action

The simplest app - Rails default page on a Shared Host

Redmine Install on a Shared Host

Git and BitBucket

Deploying Rails 4 to Heroku

Scaffold: A quickest way of building a blog with posts and comments

Databases and migration

Active Record

Microblog 1

Microblog 2

Microblog 3 (Users resource)

Microblog 4 (Microposts resource I)

Microblog 5 (Microposts resource II)

Simple_app I - rails html pages

Simple_app II - TDD (Home/Help page)

Simple_app III - TDD (About page)

Simple_app IV - TDD (Dynamic Pages)

Simple_app V - TDD (Dynamic Pages - Embedded Ruby)

Simple_app VI - TDD (Dynamic Pages - Embedded Ruby, Layouts)

App : Facebook and Twitter Authentication using Omniauth oauth2

Authentication and sending confirmation email using Devise

Adding custom fields to Devise User model and Customization

Devise Customization 2. views/users

Rails Heroku Deploy - Authentication and sending confirmation email using Devise

Deploying a Rails 4 app on CentOS 7 production server with Apache and Passenger I

Deploying a Rails 4 app on CentOS 7 production server with Apache and Passenger II

OOPS! Deploying a Rails 4 app on CentOS 7 production server with Apache and Passenger (Trouble shooting)











Contact

BogoToBogo
contactus@bogotobogo.com

Follow Bogotobogo

About Us

contactus@bogotobogo.com

YouTubeMy YouTube channel
Pacific Ave, San Francisco, CA 94115

Pacific Ave, San Francisco, CA 94115

Copyright © 2024, bogotobogo
Design: Web Master