5. Layouts e Partials
$ git add .
$ git commit -m "Especificando arquivos no
application.js e application.css"
@jlucasps
6. Layouts e Partials
Criar novo arquivo de layout
/app/views/layouts/application_black.html.erb
Adicionar atributo style à tag body
<body style='background-color:black;'>
Criar nova action 'black' no controller
Welcome
@jlucasps
def black
render :layout => 'application_black'
end
7. Layouts e Partials
Criar rota para action 'black'
match 'black' => 'welcome#black', :via => :get,
:as => :black
Criar template para a nova action:
/app/views/welcome/index.html.erb
Acessar URL http://localhost:3000/black
@jlucasps
8. Layouts e Partials
$ git add .
$ git commit -m "Utilizando mais de 1 layout"
Tente definir um layout para várias actions
Dica: layout 'application_black', :only => :black
@jlucasps
10. Layouts e Partials
Atualizem o template welcome/index.html.erb
@jlucasps
<h1>Conteúdo central</h1>
<%= content_for :sidebar do %>
<h4>sidebar</h4>
<% end %>
18. Layouts e Partials
@jlucasps
Alterar template /app/views/welcome/index.html.erb
<div class="span9">
<div class="hero-unit">
<h1>Hello, world!</h1>
<p>This is a template for a simple marketing or informational website. It includes a large callout called
the hero unit and three supporting pieces of content. Use it as a starting point to create something more
unique.</p>
<p><a href="#" class="btn btn-primary btn-large">Learn more »</a></p>
</div>
<div class="row-fluid">
<div class="span6">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna
mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details »</a></p>
</div><!--/span-->
<div class="span6">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna
mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details »</a></p>
</div><!--/span-->
</div><!--/row-->
</div><!--/span-->
<%= content_for :sidebar do %>
<%= render :partial => 'shared/sidebar' %>
<% end %>
20. Primeiros Testes
Antes.....
Configurar arquivo Gemfile com links e
documentações
Adicionar ao Gemfile
group :test do
gem 'capybara'
gem rspec-rails'
end
Executar $ bundle install
Remover diretório /test
Executar $ rails g rspec:install
@jlucasps
21. Primeiros Testes
@jlucasps
$ rails generate rspec:install
create .rspec
create spec
create spec/spec_helper.rb
Modificar o arquivo spec/spec_helper.rb
22. Primeiros Testes
@jlucasps
Adicionar as linhas em negrito ao arquivo
require File.expand_path("../..
/config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rails'
require 'capybara/rspec'
# Requires supporting ruby files with custom
matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each
{ |f| require f }
23. Primeiros Testes
@jlucasps
Adicionar as linhas em negrito ao bloco config do arquivoRSpec.configure do |config|
# ## Mock Framework
# If you prefer to use mocha, flexmock or RR,
uncomment the appropriate line:
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
config.include Capybara::DSL
config.include Rails.application.routes.
url_helpers
# Remove this line if you're not using
ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}
/spec/fixtures"
# .......
24. Primeiros Testes
@jlucasps
$ git add .
$ git commit -m "Setup RSpec"
Criar o primeiro Teste
/spec/features/welcome/index.html.erb_spec.rb
28. Primeiros Testes
@jlucasps
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$
rspec
F.
Failures:
1) .about access about page
Failure/Error: visit about_path
NameError:
undefined local variable or method `about_path' for
#<RSpec::Core::ExampleGroup::Nested_1:
0x00000003991378>
# ./spec/features/welcome/about.html.erb_spec.rb:6:in
`block (2 levels) in <top (required)>'
Finished in 0.18221 seconds
2 examples, 1 failure
Failed examples:
rspec ./spec/features/welcome/about.html.erb_spec.rb:5 # .
about access about page
Randomized with seed 10191
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$
29. Primeiros Testes
Criar uma nova rota para action about
@jlucasps
FirstApp::Application.routes.draw do
root :to => 'welcome#index', :as => :index
match 'about' => 'welcome#about', :as => :
about
match 'black' => 'welcome#black', :via => :get,
:as => :black
end
30. Primeiros Testes
@jlucasps
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rspec
F.
Failures:
1) .about access about page
Failure/Error: visit about_path
AbstractController::ActionNotFound:
The action 'about' could not be found for WelcomeController
# ./spec/features/welcome/about.html.erb_spec.rb:6:in `block
(2 levels) in <top (required)>'
Finished in 0.19052 seconds
2 examples, 1 failure
Failed examples:
rspec ./spec/features/welcome/about.html.erb_spec.rb:5 # .about
access about page
Randomized with seed 45018
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$
35. Primeiros Testes
Executar $ rspec
@jlucasps
jlucasps@lotus:
/media/truecrypt1/handsonrails/first_app$ rspec
..
Finished in 0.19564 seconds
2 examples, 0 failures
Randomized with seed 30993
jlucasps@lotus:
/media/truecrypt1/handsonrails/first_app$
36. Primeiros Testes
Executar mesmos procedimento para página
/app/views/welcome/contact.html.erb
@jlucasps
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$
rspec
...
Finished in 0.20856 seconds
3 examples, 0 failures
Randomized with seed 28272
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$
$ git add .
$ git commit -m "Páginas index, about e contact"
37. Primeiros Testes
Adicionar mais um bloco it .... do
@jlucasps
require 'spec_helper'
describe ".index", :type => :feature do
it "access index page" do
visit index_path
page.should have_content("Hello, world!")
end
it "access public pages" do
visit index_path
page.should have_content("Hello, world!")
click_link "About"
page.should have_content("About us")
click_link "Contact"
page.should have_content("How to find us")
click_link "Home"
page.should have_content("Hello, world!")
end
end