Created
May 11, 2011 03:16
-
-
Save byplayer/965857 to your computer and use it in GitHub Desktop.
rspec cheat sheet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
INSTALL | |
======= | |
$ gem install rspec | |
RSPEC-RAILS | |
=========== | |
RAILS-3 | |
======= | |
CONFIGURE THE GEMFILE | |
====================== | |
group :development, :test do | |
gem "rspec-rails", "~> 2.0" | |
end | |
INSTALL THE BUNDLE | |
=============================== | |
$ bundle install | |
BOOTSTRAP THE APP | |
================= | |
$ ./script/rails generate rspec:install | |
create .rspec | |
create spec | |
create spec/spec_helper.rb | |
create autotest | |
create autotest/discover.rb | |
RAILS-2 | |
======= | |
INSTALL | |
======= | |
$ gem install rspec-rails -v 1.3.3 | |
BOOTSTRAP THE APP | |
================= | |
$ ./script/generate rspec | |
create spec | |
create spec/spec_helper.rb | |
create spec/spec.opts | |
create previous_failures.txt | |
create script/spec_server | |
create script/spec | |
HOW TO USE | |
========== | |
COMMAND LINE | |
============= | |
rspec --color --format doc spec/widget_spec.rb | |
RAILS 3 (RSPEC 2) | |
============= | |
./rails/generate model User | |
rake -T spec # lists all rspec rake tasks | |
rake spec # run all specs | |
rake spec/models/mymodel_spec.rb # run a single spec file | |
rake spec/models/mymodel_spec.rb:27 # run a single example or group on line 27 | |
RAILS 2 (RSPEC 1) | |
============= | |
./script/generate rspec_model User | |
rake -T spec # lists all rspec rake tasks | |
rake spec # run all specs | |
rake spec SPEC=spec/models/mymodel_spec.rb SPEC_OPTS="-e \"should do | |
something\"" #run a single spec | |
module UserSpecHelper | |
def valid_user_attributes | |
{ :email => "[email protected]", | |
:username => "joebloggs", | |
:password => "abcdefg"} | |
end | |
end | |
describe "A User (in general)" do | |
include UserSpecHelper | |
before(:each) do | |
@user = User.new | |
end | |
it "should be invalid without a username" do | |
pending "some other thing we depend on" | |
@user.attributes = valid_user_attributes.except(:username) | |
@user.should_not be_valid | |
@user.should have(1).error_on(:username) | |
@user.errors.on(:username).should == "is required" | |
@user.username = "someusername" | |
@user.should be_valid | |
end | |
end | |
EXPECTATIONS | |
===================== | |
target.should satisfy {|arg| ...} | |
target.should_not satisfy {|arg| ...} | |
target.should equal <value> | |
target.should not_equal <value> | |
target.should be_close <value>, <tolerance> | |
target.should_not be_close <value>, <tolerance> | |
target.should be <value> | |
target.should_not be <value> | |
target.should predicate [optional args] | |
target.should be_predicate [optional args] | |
target.should_not predicate [optional args] | |
target.should_not be_predicate [optional args] | |
target.should be < 6 | |
target.should == 5 | |
target.should be_between(1, 10) | |
target.should_not == 'Samantha' | |
target.should match <regex> | |
target.should_not match <regex> | |
target.should be_an_instance_of <class> | |
target.should_not be_an_instance_of <class> | |
target.should be_a_kind_of <class> | |
target.should_not be_a_kind_of <class> | |
target.should respond_to <symbol> | |
target.should_not respond_to <symbol> | |
lambda {a_call}.should raise_error | |
lambda {a_call}.should raise_error(<exception> [, message]) | |
lambda {a_call}.should_not raise_error | |
lambda {a_call}.should_not raise_error(<exception> [, message]) | |
proc.should throw <symbol> | |
proc.should_not throw <symbol> | |
target.should include <object> | |
target.should_not include <object> | |
target.should have(<number>).things | |
target.should have_at_least(<number>).things | |
target.should have_at_most(<number>).things | |
target.should have(<number>).errors_on(:field) | |
expect { thing.approve! }.to change(thing, :status). | |
from(Status::AWAITING_APPROVAL). | |
to(Status::APPROVED) | |
expect { thing.destroy }.to change(Thing, :count).by(-1) | |
Mocks and Stubs | |
=============== | |
user_mock = mock "User" | |
user_mock.should_receive(:authenticate).with("password").and_return(true) | |
user_mock.should_receive(:coffee).exactly(3).times.and_return(:americano) | |
user_mock.should_receive(:coffee).exactly(5).times.and_raise(NotEnoughCoffeeExcep | |
ion) | |
people_stub = mock "people" | |
people_stub.stub!(:each).and_yield(mock_user) | |
people_stub.stub!(:bad_method).and_raise(RuntimeError) | |
user_stub = mock_model("User", :id => 23, :username => "pat", :email => | |
"[email protected]") | |
Examples (in the real world) | |
============================ | |
http://madhatted.com/2008/7/10/rspec-real-world-testing | |
presentation: http://kerryb.github.com/iprug-rspec-presentation/#31 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment