On Sep 7, 2011, at 7:03 AM, Matt Wynne wrote:

> On 7 Sep 2011, at 07:53, Sidu Ponnappa wrote:
> 
>> On 7 September 2011 11:09, Justin Ko <jko...@gmail.com> wrote:
>>> 
>>> On Tue, Sep 6, 2011 at 9:40 PM, slavix <mikerin.sl...@gmail.com> wrote:
>>>> 
>>>> Hello,
>>>> Is there any way to test model inheritance in spec?
>>>> 
>>>> something like..
>>>> 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
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to