[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

rspec and inequalities?

Mark Thomas

6/9/2008 11:35:00 AM

In an old version of rspec, you could do "x.should_be < y", but this
throws a NoMethodError now. What's the proper way to test inequalities
(less than/greater than)?
5 Answers

James Herdman

6/9/2008 3:26:00 PM

0

On Jun 9, 7:35 am, Mark Thomas <r...@thomaszone.com> wrote:
> In an old version of rspec, you could do "x.should_be < y", but this
> throws a NoMethodError now. What's the proper way to test inequalities
> (less than/greater than)?

It's basically the same:

x.should be < y

James

Mark Thomas

6/9/2008 3:52:00 PM

0


> It's basically the same:
>
>   x.should be < y
>
> James

Thanks! Is this syntactic sugar for all be_xxx methods? I just noticed
that I can omit the underscore in be_true also. I'm surprised I
haven't noticed that in examples.

Rick DeNatale

6/11/2008 10:31:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

On Mon, Jun 9, 2008 at 11:54 AM, Mark Thomas <ruby@thomaszone.com> wrote:

>
> > It's basically the same:
> >
> > x.should be < y
> >
> > James
>
> Thanks! Is this syntactic sugar for all be_xxx methods?


No.

1.should be > 0
will work, but say:

1.should be_false > 0

will fail when RSpec tries to send #:0? to 1. One might say that this is an
rspec bug, but I'd say that 1.should be_false > 0 is nonsensical, so who
cares.


> I just noticed
> that I can omit the underscore in be_true also. I'm surprised I
> haven't noticed that in examples.


This is because

x.should be y

is interpreted as

x.should eql y

so it will succeed if x.eql?(y) returns a truthy value.

Also note that there's a difference between

x.should be_true
or
x.should be true
or
x.should eql true

and

x.should be

The first three will succeed only iff x == true whereas the latter will
succeed iff x is any truthy value (i.e. anything except nil and false),
likewise

x.should_not be

will succeed iff x is a falsy value (i.e. nil or false)

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...

Mark Thomas

6/12/2008 2:42:00 PM

0

On Jun 11, 6:31 pm, Rick DeNatale <rick.denat...@gmail.com> wrote:
> > Thanks! Is this syntactic sugar for all be_xxx methods?
>
>  No.
>
>   1.should be > 0
> will work, but say:
>
>   1.should be_false > 0
>
> will fail when RSpec tries to send #:0? to 1. One might say that this is an
> rspec bug, but I'd say that 1.should be_false > 0 is nonsensical, so who
> cares.

Actually, what I meant is can
item.should be_valid

be replaced with
item.should be valid

but now that I think about it, rspec probably does some method_missing
magic with the be_ prefix and wouldn't know to use #valid? with the
question mark. Maybe the equivalent is

item.should be valid?

Rick DeNatale

6/12/2008 9:41:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

On Thu, Jun 12, 2008 at 10:44 AM, Mark Thomas <ruby@thomaszone.com> wrote:

>
> Actually, what I meant is can
> item.should be_valid
>
> be replaced with
> item.should be valid
>
> but now that I think about it, rspec probably does some method_missing
> magic with the be_ prefix and wouldn't know to use #valid? with the
> question mark. Maybe the equivalent is
>
> item.should be valid?
>
>
I don't think that would work. But I think you could use the rather Yoda
like:

item.valid?.should be

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...