[rspec-users] should_be_different -- possible implementation

s.ross cwdinfo at gmail.com
Mon Dec 4 13:51:34 EST 2006


Did the syntax discussion ever get settled. The signature is  
should_change(receiver, message) but there were discussions in this  
thread:

http://rubyforge.org/pipermail/rspec-devel/2006-November/001251.html

That discussed lots of cool syntactic sugar. What was settled upon?

Person.should_change :count do
	Person.create(:name => 'ozzy osbourne')
end

How do you specify by how much?

Thx


On Dec 4, 2006, at 10:33 AM, David Chelimsky wrote:

> On 12/4/06, aslak hellesoy <aslak.hellesoy at gmail.com> wrote:
>> On 12/4/06, David Chelimsky <dchelimsky at gmail.com> wrote:
>>> On 12/4/06, s.ross <cwdinfo at gmail.com> wrote:
>>>> There is an assert_difference helper for Test::Unit (you can read
>>>> about it at http://blog.caboo.se/articles/2006/06/13/a-better-
>>>> assert_difference and to some it should look familiar -- you  
>>>> know who
>>>> you are :), so I took a shot at one for rSpec on Rails.
>>>
>>> We've already got this in 0.7.4. It's called assert_change, but it's
>>> the same functionality you're looking for:
>>>
>>
>> Typo: It's called should_change
>
> LOL
>
> I got half way there.
>
>
>>
>>> http://rspec.rubyforge.org/documentation/expectations.html
>>>
>>> Cheers,
>>> David
>>>
>>>>
>>>>
>>>> class Object
>>>>      def should_be_different(method = nil, difference = nil)
>>>>          return self.should_not_eql(yield) if method.nil?
>>>>
>>>>          before = self.send(method)
>>>>          yield
>>>>          return self.send(method).should_not_eql(before) if
>>>> difference.nil?
>>>>          (self.send(method) - before).should_eql difference
>>>>      end
>>>> end
>>>>
>>>>
>>>> Usage:
>>>>
>>>>      specify "should be able to create a new user" do
>>>>          Person.create(:name => 'joe')
>>>>          Person.should_be_different :count do
>>>>              Person.create(:name => 'bob')
>>>>          end
>>>>      end
>>>>
>>>> This has probably already been done, but I thought I'd put it out
>>>> here for comment in case it hadn't. Note that if you omit the  
>>>> method,
>>>> the objects are tested for equality (however the object defines  
>>>> it).
>>>> If you include the method but omit the difference, then any amount
>>>> difference is ok. Testing destroy might indicate using -1 for the
>>>> difference to indicate that the count has gone down.
>>>>
>>>> My implementation works, but a more natural syntax would be:
>>>>
>>>> Person.count.should_be_different do
>>>>         blah
>>>> end
>>>>
>>>> and:
>>>>
>>>> Person.count.should_be_different_by 1 do
>>>>         blah, blah
>>>> end
>>>>
>>>> Comments?
>>>>
>>>> Steve
>>>>
>>>> _______________________________________________
>>>> rspec-users mailing list
>>>> rspec-users at rubyforge.org
>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>>
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users



More information about the rspec-users mailing list