[rspec-users] How Can I inveke a code example in another one
David Chelimsky
dchelimsky at gmail.com
Wed Oct 28 07:39:54 EDT 2009
On Oct 28, 2009, at 2:56 AM, zhjie685 wrote:
> Hi,
> I'm new to rspec.
> How could I transform the Unit:Tests code like
>
> def test_logout
> login
> get :logout
> assert_not_logged_in
> end
> def assert_not_logged_in
> assert_block { session["user"].nil? }
> end
>
> that a test method invoke another test method,to repec code.
>
> Should I put them in one code example? or there is other way?
>
> Thanks!
Instead of assertions, RSpec uses expectations, like this:
describe "GET /logout" do
it "removes the user from the session" do
login
get :logout
session["user"].should be_nil
end
end
An expectation has two parts: should() or should_not(), and a matcher.
In this case, be_nil() is a matcher that's built in to RSpec. You can
also write your own, using RSpec's matcher DSL:
Spec::Matchers.define :be_logged_out do
match do |session|
session["user"].nil?
end
end
describe "GET /logout" do
it "ends the user session" do
login
get :logout
session.should be_logged_out
end
end
Or you could write a be_logged_in matcher and use it with should_not,
like this:
Spec::Matchers.define :be_logged_in do
match do |session|
!!session["user"]
end
end
describe "GET /logout" do
it "ends the user session" do
login
get :logout
session.should_not be_logged_in
end
end
Check out the following for more info:
http://wiki.github.com/dchelimsky/rspec/custom-matchers
http://github.com/dchelimsky/rspec/tree/master/features/matchers/
and, of course:
http://www.pragprog.com/titles/achbd/the-rspec-book
HTH,
David
More information about the rspec-users
mailing list