[rspec-users] testing behaviour or testing code?
justnothing at tiscali.co.uk
Sat Aug 25 03:01:11 EDT 2007
David Chelimsky-2 wrote:
> It depends on how high you have your magnifying glass set. Really!
> Here's how I'd get there:
> In an integration test, which I use as ... well ... integration tests
> can't get tested), I'd have something akin to the second example,
> except that the creates would be done through a controller. This would
> be in place before I ever started working on individual objects.
> Then I'd develop the view, followed by the controller, followed by the
> model. Typically, in my experience, that would result in something
> like (not executing these so please pardon any potential bugs):
> describe "/widgets/index" do
> it "should display a list of widgets" do
> assigns[:widgets] = [
> mock_model(Widget, :name => 'foo'),
> mock_model(Widget, :name => 'bar')
> render '/widgets/index'
> response.should have_tag('ul') do
> with_tag('li', 'foo')
> with_tag('li', 'bar')
> describe WidgetController, 'responding to GET /widgets' do
> it "should assign a list of widgets" do
> Widget.should_receive(:find_alphabetically).and_return(list = )
> get :index
> assigns[:widgets].should == 
> describe Widget, "class" do
> it "should provide a list of widgets sorted alphabetically" do
> Widget.should_receive(:find).with(:order => "name ASC")
> You're correct that the refactoring requires you to change the
> object-level examples, and that is something that would be nice to
> avoid. But also keep in mind that in java and C# people refactor
> things like that all the time without batting an eye, because the
> tools make it a one-step activity. Refactoring is changing the design
> of your *system* without changing its behaviour. That doesn't really
> fly all the way down to the object level 100% of the time.
after reading your post yesterday, I dug out some old specs that were doing
some really complex setup using real objects, and rewrote them to
exclusively use mocks and stubs. The specs run around 20% quicker, but more
importantly, the code is much less complex and much easier to work with!
it's a relief not having to worry about model behaviour in controller specs.
so much so that I ended up adding around 50% more examples and catching some
bugs which I'd missed.
I wasn't testing my views at all, instead relying on integrate_views to
catch any problems. This time round I wrote view specs, which is a little
more work but testing only one MVC aspect in isolation really makes things
simpler. I realise now that the old way, I was using controller specs to
test integration rather than controllers.
I'm relatively new to programming, and it's all self taught so I can't speak
with authority, but the more I use BDD, the more I like it. It just makes
sense. thanks for your help
p.s. when is the book coming? :)
View this message in context: http://www.nabble.com/testing-behaviour-or-testing-code--tf4322619.html#a12323713
Sent from the rspec-users mailing list archive at Nabble.com.
More information about the rspec-users