[rspec-users] Question About Cleaning Up Specs?

me at franklakatos.com me at franklakatos.com
Thu Feb 18 11:25:15 EST 2010


I know we are suppose to keep specs obvious and readable, but is it  
normal (or there any opposition) to stubbing every method call that  
you needed in a before block and simply over-riding the same method  
with a should_receive in the actual tested it()?

Example

describe "#create" do
   it "should find a user"
     @user = mock_model(User)
     User.should_receive(:find).and_return @user
     @posts = []
     @post = mock_model(Post)
     @posts.stub(:build).and_return @post
     post "create"
   end

   it "should build a post from that user" do
     @user = mock_model(User)
     User.stub(:find).and_return @user
     @posts = []
     @post = mock_model(Post)
     @posts.should_receive(:build).and_return @post
     post "create"
   end
end

... would become ..


describe "#create" do
   before do
     @user = mock_model(User)
     User.stub(:find).and_return @user
     @posts = []
     @post = mock_model(Post)
     @posts.stub(:build).and_return @post
   end

   it "should find a user"
     User.should_receive(:find).and_return @user
     post "create"
   end

   it "should build a post from that user" do
     @posts.should_receive(:build).and_return @post
     post "create"
   end
end

Note that I stubbed both method calls in the before, but only  
should_require'd them in the appropriate it()?

Let me know if that's good practice




More information about the rspec-users mailing list