Subsecciones

Testeando una Aplicación Sinatra

Consideremos la siguiente aplicación Sinatra que permite submitir una revisión de un libro y que retorna los datos enviados. No se ha implementado persistencia.

app.rb

[~/application_testing_with_capybara/sinatra(master)]$ cat app.rb 
require 'bundler/setup'
require 'sinatra'

class BookReview < Sinatra::Base

  get '/form' do
    erb :form
  end

  post '/submit' do
    @name = params[:name]
    @title = params[:title] 
    @review = params[:review]
    @age = params[:age]
    erb :result
  end

end

#only run if invoked from command line - otherwise leave to Capybara
BookReview.run! if __FILE__ == $0

Entrada

Plantilla para el Formulario. Template: form.erb

[~/application_testing_with_capybara/sinatra(master)]$ cat views/form.erb 
<link rel="stylesheet" href="css/form.css">
<form action="/submit" method="post">
  <header id="header" class="info">
    <h2>Book Reviews</h2>
    <div>Review the last book you purchased...</div>
  </header>
  <ul>
    <li>
    <label for="name">
      Your Name
    </label>
    <input type="text" id="name" name="name" maxlegth="255">
    </li>
    <li>
    <label class="desc" for="age">
      Age Range
    </label>
    <div>
      <select id="age" name="age"> 
        <option value="-" selected="selected">
        </option>
        <option value="<20" >
        Under 20
        </option>
        <option value="20-50" >
        20 - 50 
        </option>
        <option value="50+" >
        Over 50
        </option>
      </select>
    </div>
    </li>
    <li>
    <label for="book_title">
      Book Title
    </label>
    <input type="text" id="book_title" name="title" maxlegth="255">
    </li>
    <li>
    <label for="review">
      Your Review...
    </label>
    <textarea id="review" name="review" rows="10" cols="50"></textarea>
    </li>
    <li>
    <input type="submit" value="Submit"/>
    </li>
  </ul>
</form>

Plantilla/Template con los resultados: result.erb

Hay otro template ERB utilizado para mostrar la revisión:
[~/application_testing_with_capybara/sinatra(master)]$ cat views/result.erb 
<div class="saved_review">
<p>You submitted the following on: <%= Time.new.strftime("%Y-%m-%d %H:%M:%S") %> </p>
  <ul>
    <li>
    <p id="name">Name: <%= @name %></p>
    </li>
    <li>
    <p id="age">Age: <%= @age %></p>
    </li>
    <li>
    <p id="title">Book Title: <%= @title %></p>
    </li>
    <li>
    <p id="review">Book Review: <%= @review %></p>
    </li>
  </ul>
  <a href="/form">Submit another review...</a>
</div>

Salida

Veamos ahora como hacer las pruebas para esta aplicación usando Capybara.

Casiano Rodriguez León 2015-01-07