Rspec testing inheritance

Hello,
Is there any way to test model inheritance in spec?

something like…
it { ChildModel.should < ParentModel }

thanks.

On Tue, Sep 6, 2011 at 9:40 PM, slavix [email protected] wrote:

http://rubyforge.org/mailman/listinfo/rspec-users

specify { ChildModel.should be < ParentModel }

Wouldn’t this be an implementation bound spec?

Best,
Sidu.
http://c42.in

On 7 Sep 2011, at 07:53, Sidu P. wrote:

it { ChildModel.should < ParentModel }

thanks.

Wouldn’t this be an implementation bound spec?

+1

Test the behaviour, not the implementation. You could look at using a
shared example group if you want to specify that the subclass shared
behaviour with the superclass.


Freelance programmer & coach
Author, Search (with Aslak
Hellesy)
Founder, http://relishapp.com
+44(0)7974430184 | http://twitter.com/mattwynne

On Sep 7, 2011, at 7:03 AM, Matt W. wrote:

it { ChildModel.should < ParentModel }

thanks.

Wouldn’t this be an implementation bound spec?

+1

Test the behaviour, not the implementation. You could look at using a shared
example group if you want to specify that the subclass shared behaviour with the
superclass.

+1

It might not surprise you that I prefer to focus on behavior over
implementation (though it might surprise some people who think I like to
mock too much! ;)), however …

-1

… there are absolutely valid cases for focusing on type. In
rspec-rails, for example, mock_models need to lie about their type to
Rails’ internals in order for things to run smoothly. There are,
therefore, examples like:

mock_model(“User”).should be_a(User)

Any sort of factory that might generate objects of different types in
different contexts would warrant this as well.

That said, I’ll guess that @slavix’s motivation here is that there are
ParentModel specs and he doesn’t want to duplicate them for ChildModel.
If that’s true, then a shared group is definitely a better option for a
number of reasons. The most obvious one is that ChildModel is free to
override behavior defined in ParentModel, so the fact that ChildModel <
ParentModel is no guarantee that they behave the same way.

HTH,
David