[rspec-users] Date Approximation in Specs
David Chelimsky
dchelimsky at gmail.com
Wed Jan 10 14:22:01 EST 2007
On 1/10/07, s.ross <cwdinfo at gmail.com> wrote:
> I upgraded to trunk and changed the code as follows:
>
> module DateExpectations
> HOUR_TOLERANCE = 60 * 60
> DAY_TOLERANCE = HOUR_TOLERANCE * 24
> WEEK_TOLERANCE = DAY_TOLERANCE * 7
>
> class BeCloseTo
> def initialize(target_date, tolerance)
> @target_date = Time.parse(target_date)
> @tolerance = tolerance
> end
>
> def met_by?(target)
> compare_date = target - @target_date
> adjustment = @tolerance.inject do |item|
> case item
> when :days
> adjustment += DAY_TOLERANCE
> when :weeks
> adjustment += WEEK_TOLERANCE
> end
> end
> return true if compare_date.abs < adjustment
> end
>
> def failure_message
> return "#{@target_date} does not fall within tolerance." # s/
> b better
> 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
> 1.day.ago.should_be_close_to("1/9/2007", :days => 2) # <- line 40
> end
> end
>
> The result is:
>
> 1)
> NoMethodError in 'My package should be delivered no later than 2 days
> after my order'
> undefined method `close_to?' for Tue Jan 09 10:59:31 -0800 2007:Time
> ./spec/helpers/date_range_spec.rb:40:
>
>
> Any thoughts as to why? (Note: You had written the expectation in
> your sample as:
> "should<space>be_close_to" -- was that intentional?).
Yes!!!! That's the whole point. ;)
should be_close_to
and your method should be named be_close_to
Let me know how it works out.
Thanks for giving this a shot - you're the guinea pig!
David
>
> Steve
>
>
> On Jan 9, 2007, at 8:26 PM, David Chelimsky wrote:
>
> > 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
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
More information about the rspec-users
mailing list