[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