This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
Matthew Bass (author)
Sat Jun 28 18:21:57 -0700 2008
| name | age | message | |
|---|---|---|---|
| |
CHANGELOG | Sat Jun 28 18:20:44 -0700 2008 | [Matthew Bass] |
| |
LICENSE | Wed Apr 02 18:40:14 -0700 2008 | [Matthew Bass] |
| |
README | Tue May 27 17:56:28 -0700 2008 | [Matthew Bass] |
| |
Rakefile | Wed Apr 02 18:40:14 -0700 2008 | [Matthew Bass] |
| |
lib/ | Sat Jun 28 18:21:57 -0700 2008 | [Matthew Bass] |
| |
test/ | Wed Apr 02 18:40:14 -0700 2008 | [Matthew Bass] |
README
test/spec/rails
This plugin contain some helpers to test your Rails app using test/spec.
Installation
------------
* Install test/spec: gem install test-spec
* Install test/spec/rails
* require 'test/spec/rails' in your test_helper.rb
Source
------
test/spec/rails uses Git for source control. If you're running edge Rails you can install with:
script/plugin install git://github.com/pelargir/test_spec_on_rails.git
Otherwise just clone the project directly:
git clone git://github.com/pelargir/test_spec_on_rails.git vendor/plugins/test_spec_on_rails
Model validation
----------------
@user.should.validate
@user.should.not.validate
or:
@user.should.be.validated
@user.should.not.be.validated
Redirection
-----------
response.should.be.redirected # assert_response :redirect
response.should.redirect foo_url(@foo) # assert_redirected_to foo_url(@foo)
should.redirect_to :action => 'show' # because "response" is optional
It's aliased as redirect, redirect_to, redirected and redirected_to
Output verification
-------------------
Wrapper for assert_select:
get :show
page.should.select "form#user_form" # require the output to have a <form id="user_form">
page.should.select "form#user_form" do |form|
form.should.select "input[type=submit]" # the user_form must include a <input type="submit">
end
HTTP Status
-----------
Wrapper for assert_response:
status.should.be :success
status.should.be 200
Which template was rendered?
----------------------------
Wrapper for assert_template:
template.should.be "foo/show.rhtml"
Which layout used?
------------------
Wrapper for asserting that a certain layout is used:
layout.should.be "foo"
URL testing
-----------
get :show, :user_id => 1
url.should.be "/users/1"
url.should.be :controller => "users", :action => "show", :user_id => 1
Difference
----------
Wrapper for assert_difference:
Article.should.differ(:count).by(2) { blah }
Routing to set of url options from a given path (i.e., #assert_generates)
-------------------------------------------------------------------------
assert_generates "/users/1", :controller => "users", :action => "show", :id => "1"
becomes
{:controller => "users", :action => "show", :id => "1"}.should.route_to "/users/1"
Routing from a set of url options to an expected path (i.e., #assert_recognizes)
--------------------------------------------------------------------------------
assert_recognizes({:controller => "users", :action => "show", :id => "1"}, {:path => "/users/1", :method => :get})
becomes
{:path => "/users/1", :method => :get}.should.route_from :controller => "users", :action => "show", :id =>"1"
Setup controller for testing + example usage
--------------------------------------------
context "A guest" do
use_controller FooController
specify "isn't allowed to foo" do
post :create, :foo => 'bar'
flash[:error].should.not.be.blank
response.should.redirect :controller => 'front', :action => 'show'
assigns(:foo).errors.on(:bar).should.not.be.blank
assigns(:foo).should.not.validate
follow_redirect
page.should.select "#errors", :text => /#{flash[:error]}/
end
end
context "Tuxie" do
setup do
use_controller FooController
login_as :tuxie
end
specify "may foo" do
post :create, :foo => 'bar'
flash[:notice].should.not.be.blank
assigns(:foo).errors.should.be.empty
assigns(:foo).should.validate
should.redirect_to :action => 'show'
follow_redirect
page.should.select "#notice", :text => /#{flash[:notice]}/
end
end
Misc
----
page, response and request are just aliases for self (the TestCase) so the following
are functionally identical:
page.should.redirect
response.should.redirect
request.should.redirect
output, body, html and xhtml return @response.body so the following lines are identical:
output.should.match /foo/
html.should.match /foo/
xhtml.should.match /foo/
body.should.match /foo/
If an object respond to #should_equal, that method will be used instead of assert_equal
when using foo.should.equal(bar) or foo.should.be(bar)
foo.should.not.equal and foo.should.not.be look for #should_not_equal
Credit
------
* Created by Per "Tuxie" Wigren <per.wigren@gmail.com>
* Enhanced by Rick Olson <technoweenie@gmail.com>
* Currently maintained by Matthew Bass <pelargir@gmail.com>




