[rspec-users] Date Approximation in Specs
s.ross
cwdinfo at gmail.com
Wed Jan 10 02:26:42 EST 2007
I'm running 0.7.5. I guess I should learn how to install rspec from
svn, huh? Basically, each time I change my version of rspec, I have
to dive into 5 or 6 projects to update their Rails plugins and so
on... Any shortcuts you use when doing this?
Thanks for doing this so quickly!
Steve
On Jan 9, 2007, at 8:26 PM, David Chelimsky wrote:
> On 1/9/07, David Chelimsky <dchelimsky at gmail.com> wrote:
>> On 1/9/07, s.ross <cwdinfo at gmail.com> wrote:
>>> The floating-point expectations allow for an error tolerance. Is
>>> there any similar facility for dates? For example, say I have a
>>> custom class that handles date/time spans and I want to spec it:
>>>
>>> context "A DateRange span" do
>>> specify "should know when a week ago is :)" do
>>> d = DateRange.new
>>> d.last_week.should_be_close_to(1.week.ago, 24*60*60)
>>> end
>>> end
>>>
>>> The idea of should_be_close_to is to provide a tolerance. My class
>>> only is required to be accurate to the same day, and I want to
>>> express that in terms of "close_to" uncertainty. Is there a great
>>> baked-in way I'm missing?
>>>
>>> I have code to do this in Test::Unit that I could port over if need
>>> be but I'd rather not if something better already exists.
>>
>> Doesn't exist yet. Feel free to add a feature request:
>>
>> http://rubyforge.org/tracker/?group_id=797
>
> Hey Steve - I just committed a small enhancement to rspec core that is
> intended to pave the way for custom expectations. Are you working w/
> 0.7.5 or the trunk? If you're working w/ trunk, grab the latest trunk
> and do this:
>
> module DateExpectations
> class BeCloseTo
> def initialize(target_date, tolerance)
> @target_date = target_date
> @tolerance = tolerance
> end
>
> def met_by?(target)
> #return true if target is a date
> #that meets the expectation
> end
>
> def failure_message
> #return an appropriate failure message
> end
> end
>
> def should_be_close_to(target_date, tolerance)
> return BeCloseTo.new(target_date, tolerance)
> end
> end
>
> context "My package" do
> include DateExpectations
> specify "should be delivered no later than 2 days after my order" do
> delivery_date.should be_close_to("1/9/2007", :days => 2)
> end
> end
>
> This is only experimental today, but will very likely become the entry
> way for custom expectations. Let me know how it works out for you.
>
> Cheers,
> David
>
>>
>>> Thanks,
>>>
>>> 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
More information about the rspec-users
mailing list