On 15 Sep 2008, at 21:14, Tim Glen wrote:

Hey all,

I've got some code that I (mostly) inherited. It essentially has a couple of AR class methods that look for a specific record by id:

class Project < ActiveRecord::Base
  class << self
    def specific_project
@another_specific_project ||= Project.find(10) if Project.exists?(10)
    end

    def another_specific_project
      @specific_project ||= Project.find(11) if Project.exists?(11)
    end
  end
end

Typically, when I've specced this code (or more accurately, code that uses it), I've stubbed out those methods to return a mocked model. Lately, I've started using cucumber and adding stories for areas we're adding features to or finding regressions in. From what I can tell, I can't stub or mock anything from within cucumber step files. Realizing that the pattern is a bit of code smell, I feel like I have two directions I could go: 1. Is there a way to stub out the model to return some fixture-type records? 2. Does anyone have an idea as to how we could refactor this into a better pattern? Those 2 "projects" are pretty specific to the production data and will "never be edited," but it still doesn't make me comfortable.

If those objects are built into your system and will never, ever change, I would consider storing their definition in the code rather than in the database anyway.

http://www.refactoring.com/catalog/replaceTypeCodeWithSubclasses.html

That would get around your issues with the pristine test database being different to the production / development database, and IMO more clearly communicates to future developers that these objects are 'special'.

Of course it depends on how many of them there are, whether you have a use case for editing them etc, but it's worth thinking about.

Alternatively you could call the migrations that insert this stock data (presumably you have some) from your spec pre-requisites.

cheers,
Matt
----
http://blog.mattwynne.net
http://songkick.com

In case you wondered: The opinions expressed in this email are my own and do not necessarily reflect the views of any former, current or future employers of mine.



_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to