Each "it" runs in isolation. The flow is, all the "before" blocks run in order from outer to inner, before each "it" block. You can think of each "it" expectation as sending you to the start, to test another isolated expectation about the process. This is good, because a failure in one part of the system won't necessarily break tests for another part.
-- matt On Feb 23, 2012, at 3:38 PM, Mohamad El-Husseini <husseini....@gmail.com> wrote: > I'm new to RSpec, Rails, and Ruby. I'm following the Rails Tutorial. I was > going over some RSpec code and go wanted some clarification: > > describe "User pages" do > subject { page } > > describe "sign up" do > describe "with valid information" do > before do > fill_in "Name", with: "Mickey Mouse" > fill_in "Email", with: "mic...@disney.com" > fill_in "Password", with: "m1ck3y" > fill_in "Confirmation", with: "m1ck3y" > end > > it "should create a user" do # block 1 > expect { click_button "Sign up" }.to change(User, :count).by(1) > end > > describe "after saving the user" do #block 2 > before { click_button 'Sign up' } > let(:user) { User.find_by_email('mic...@disney.com') } > it { should have_selector('title', text: user.name) } > it { should have_link('Sign out') } > end > end > > Notice the "it 'should create a user'" block. Why doesn't the user we create > in that block carry over to the next block? ("after saving the user")? Why is > it necessary to write > > before { click_button 'Sign up' } in order to test for the user? Shouldn't > the user already exist as it was created in block 2? > > I'm looking to understand the flow of events in RSpec. > > Thanks! > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users