On Aug 7, 2010, at 4:37 PM, Ashley Moran wrote:

> On 7 Aug 2010, at 22:10, David Chelimsky wrote:
> 
>> So - what should we do? I don't think changing Minitest is really an option, 
>> as too many assertion libraries already wrap Minitest assertions. I don't 
>> think RSpec should be in the business of monitoring methods end-users define 
>> to make sure they're not overriding pre-existing methods (what if you 
>> override a method intentionally?). The only thing I'm left with is document 
>> this particular case and hope for the best, but that feels unsatisfactory as 
>> well.
> 
> While I fully agree if you `def` a method that already exists, you should be 
> expected to deal with it yourself (that's just the way things are in Ruby), 
> does the same apply to `let`?  I can actually see an argument that you should 
> only be able to `let` a method that doesn't already exist, and also only do 
> it once (which is just a consequence of not being able to override a method, 
> given the current implementation). 

> Can you think of any downsides of preventing RSpec users from overriding 
> existing methods with `let`?

Yes. Let's say I write a shared example group with this:

def foo
  raise "you need to define a foo method in the block passed to 
it_should_behave_like"
end

And you override it using let(:foo), which would be a perfectly reasonable way 
to handle it. In fact, it would be the way I would handle in instinctively, 
because now I don't have to wrote my own memoization handling into the method.

> Are there any popular names already taken?  Or other problems?
> 
> To me, `let` is magic.  I don't think of it, first and foremost, of defining 
> a method.

>From the RDoc: Generates a method whose return value is memoized after the 
>first call.

> I see the things it creates as more like local variables, and just remind 
> myself that they're methods if I wonder why it works.
> 
> I'm not sold either way on this, but I think it's one worth a debate.

The debate is on! Any other opinions out there?

> Ash

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

Reply via email to