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, [email protected] 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 > [email protected] > http://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list [email protected] http://rubyforge.org/mailman/listinfo/rspec-users
