[rspec-users] Question About Cleaning Up Specs?

Pat Maddox mailinglists at patmaddox.com
Fri Feb 19 20:13:02 EST 2010


I disagree with the crowd on the basis that these examples are lazy.  Very close to what I do though.

Imagine you had one other example in there:

it "should assign the post to the view" do
  post :create
  assigns[:post].should == @post
end

Then you wouldn't really need the other should_receive examples.  Why?  Well, there's no way for that object to be returned other than via your User.find().build chain, is there?

I would still write the should_receive's, but they would include the arguments I expect the method to receive.  That's the point where something could get screwed up.

But hopefully you can see why, if you've created a chain of stubbed methods, you only need to verify the end result of the chain, and everything up to it is verified implicitly.

Pat



On Feb 18, 2010, at 8:25 AM, me at franklakatos.com wrote:

> 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
> 
> 
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users



More information about the rspec-users mailing list