Testing on enter state


#1

I was reading some old posts on how we shouldn’t test private methods,
but there seemed to be an exception for states.

When my model enters a state, a method is executed. (:on => Proc …)
I just want to test this method. I couldn’t find much material on it.
How can I go about this?

Thanks,
Ramon T.


#2

On Wed, Nov 19, 2008 at 7:17 AM, Ramon T. removed_email_address@domain.invalid
wrote:

I was reading some old posts on how we shouldn’t test private methods,
but there seemed to be an exception for states.

When my model enters a state, a method is executed. (:on => Proc …)
I just want to test this method. I couldn’t find much material on it.
How can I go about this?

While there are always exceptions to guidelines, I’ve never seen a
general exception to “don’t test privates” for states.

Are you averse to just going at this from the public API?


#3

On Wed, Nov 19, 2008 at 7:55 AM, Ramon T. removed_email_address@domain.invalid
wrote:

general exception to “don’t test privates” for states.

Are you averse to just going at this from the public API?

Not sure if I’m understanding right, but no, I can make the method
public – I just got used to methods, that aren’t (or don’t need to
be) called by anything but its owner, being private.

I didn’t mean make the methods public. I meant use the public API.

For example, this:

describe Dog do
it “should increase its heart rate when the postman arrives” do
dog = Dog.new
lambda {dog.see Postman.new}.should change{dog.heartrate}.by(10)
end
end

rather than this:

describe Dog do
it “should transition to an agitated state when the postman arrives”
do
dog = Dog.new
dog.should_receive(:transition_to).with(:agitated)
dog.see Postman.new
end
end

Make sense?

If I make it public it solves my question somewhat :slight_smile:

Thanks,
Ramon T.


#4

Not sure if I’m understanding right, but no, I can make the method
public – I just got used to methods, that aren’t (or don’t need to
be) called by anything but its owner, being private.

If I make it public it solves my question somewhat :slight_smile:

Thanks,
Ramon T.


#5

Ahh… yes, you do. Thanks a lot! That definitely answers my question.

Ramon T.


#6

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 19 Nov 2008, at 14:01, David C. wrote:

describe Dog do
it “should transition to an agitated state when the postman
arrives” do
dog = Dog.new
dog.should_receive(:transition_to).with(:agitated)
dog.see Postman.new
end
end

Can I just say that that is a truly great example :slight_smile:

Rahoul B.
Web design and development: http://www.3hv.co.uk/
Nottingham Forest: http://www.eighteensixtyfive.co.uk/
Serious Rails Hosting: http://www.brightbox.co.uk/
Lifecast: http://www.madeofstone.net/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)

iEYEARECAAYFAkkkIv4ACgkQu0BNRvjN8xSqWACfRAq1jiaqQnxDfvhdG/F1xy4A
qeMAn11P+WAcY8F7XVENIfMl1BEE9sO5
=Vp0S
-----END PGP SIGNATURE-----


#7

In other words, the object changes its private state to achieve a
publically
visible result (otherwise, why bother?) Test that result.

///ark


#8

In other words, the object changes its private state to achieve a
publically
visible result (otherwise, why bother?) Test that result.

///ark