On Sep 14, 2010, at 11:04 AM, Brian Takita wrote:

> On Tue, Sep 14, 2010 at 6:27 AM, David Chelimsky <[email protected]> wrote:
>> Hey Brian - long time. Hope all is well. More below ...
> Hey David, I've been pretty busy, and things are going well. It seems
> like things are going well with you :-)
>> 
>> On Sep 14, 2010, at 12:04 AM, Justin Ko wrote:
>> 
>>> On Sep 14, 12:31 am, Brian Takita <[email protected]> wrote:
>>>> Hey, rspec 2 upgrade question.
>>>> 
>>>> Rspec 1.x had a class hierarchy. In a Rails project, the ExampleGroup
>>>> inherited from Test::Unit::TestCase.
>>>> That allowed me to set use_transactional_fixtures in my own
>>>> ExampleGroups and rely on inheritance for the settings to propagate.
>> 
>> How are you telling rspec to load which example groups? Maybe we can 
>> accomplish the same with mixins.
> I converted the ExampleGroups into mixins, but there are some issues.
> Basically, I made ExampleGroup classes (with class methods). The class
> methods also relied on inheritance (to use super).
> There are complications with the new architecture. I'm trying to
> figure out if my architecture is "compatible" with RSpec 2.0.
>> 
>>>> Now it seems like RSpec::Core::ExampleGroup no longer inherits from
>>>> Test::Unit::TestCase and there is RSpec.configure instead.
>> 
>> Not instead - there was always Spec.configure - but yes, I worked with the 
>> Rails core team to make it so RSpec didn't need to depend on the Test::Unit 
>> or Minitest runners but could still get all the services in rails tests.
> True. I always preferred setting use_transactional_fixtures directly
> in the ExampleGroup because it is more straightforward (less software
> needed and less things breaking until now) and worked really well with
> the inheritance hierarchy.
> I could override use_transactional_fixtures in subclasses.
>> 
>> Now we use metadata set on groups to determine when to mix in what behaviour:
>> 
>> module MyExtension
>>  ...
>> end
>> 
>> RSpec.configure do |c|
>>  c.include(MyExtension, :foo => :bar)
>> end
>> 
>> describe "something", :foo => :bar do
>>  ...
>> end
>> 
>> In rspec-rails, that's done implicitly by matching the :type key in the 
>> metadata, which gets set before RSpec.configure is processed.  You could do 
>> something similar if you wanted to make these inclusions work implicitly 
>> based on some other criteria like directory path, etc.
>> 
>> That all make sense? If not, can you give me a clearer picture of  your use 
>> case?
> I have different subclasses of ExampleGroup. I use instance and class
> method overriding. I also call class methods (defined in the parent or
> current class) in the ExampleGroup definitions.

How does your setup select which of the available ExampleGroup subclasses to 
instantiate in each case?

> The metadata is interesting. I'm trying to figure out how module
> inheritance & metadata can be used as a substitute.
> 
> Correct me if I'm wrong about my following points:
> If I were to use the metadata, I have to sort of reimplement the class
> method inheritance (for class methods from Test::Unit such as
> use_transactional_fixtures) using the metadata.
> 
> If the class method is originally defined in rspec, I can somehow
> wrangle module inheritance to properly handle class methods. However,
> in this case, it's simpler with class inheritance.

How would you see this working, given the existing architectural changes?

>>>> How do I have the settings in the configuration propagate to subtypes
>>>> of the ExampleGroup?
>>> describe 'I want this to be inherited' do
>>>  before do
>>>    RSpec.configure {|c| c.use_transactional_fixtures = false }
>>>  end
> I'm surprised that would that work. I would think that Fixture loading
> would be one of the first before blocks and would occur before the
> configure statement.
> I suppose if you could somehow prepend the before block to the front
> of everything, it would work.
>>> 
>>>  context 'blah' do
>>> 
>>> I would wrap it in a method if you're doing it often.
>> _______________________________________________
>> rspec-users mailing list
>> [email protected]
>> http://rubyforge.org/mailman/listinfo/rspec-users
>> 
> Thank you,
> Brian
> _______________________________________________
> rspec-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to