[rspec-users] How do I extend ExampleGroup in Rspec 2?

David Chelimsky dchelimsky at gmail.com
Sat Aug 7 11:17:29 EDT 2010


On Aug 7, 2010, at 10:15 AM, David Chelimsky wrote:

> On Aug 7, 2010, at 10:04 AM, Kristian Mandrup wrote:
> 
>> Thanks, but it didn't work. The following somewhat ugly hack works
>> however.
>> 
>> module RSpec::Core
>> class ExampleGroup
>>   def with_generator &block
>>     RSpec::Generator.with_generator &block
>>   end
>> 
>>   def setup_generator test_method_name=nil, &block
>>     RSpec::Generator.setup_generator test_method_name, &block
>>   end
>> end
>> end
> 
> Please submit an issue for this - it should work as I suggested: http://github.com/rspec/rspec-core/issues

FYI - this passes for me:

module Foo
  def bar
    yield
  end
end

RSpec.configure do |c|
  c.include Foo
end

describe :a do
  it "foo" do
    yielded = false
    bar do
      yielded = true
    end
    yielded.should be_true
  end
end



> 
>> 
>> 
>> On Aug 7, 4:09 pm, David Chelimsky <dchelim... at gmail.com> wrote:
>>> On Aug 7, 2010, at 8:23 AM, Kristian Mandrup wrote:
>>> 
>>> 
>>> 
>>>> I simply want all methods of a module to be always available within
>>>> the context of an Example group.
>>> 
>>>> module RSpec
>>>> module Generator
>>>>     def with_generator &block
>>>>      ...
>>>>     end
>>> 
>>>>     def setup_generator test_method_name=nil, &block
>>>>       ...
>>>>     end
>>>> end
>>>> end
>>> 
>>>> How do I achieve this?
>>> 
>>>> In RSpec 1 I think you would use ExampleGroupFactory
>>> 
>>>> I thought I could do it something like this with RSpec 2?
>>> 
>>>> RSpec.configure do |c|
>>>> c.extend RSpec::Generator
>>>> end
>>> 
>>>> I want to be able to do something like this
>>> 
>>>> before :each do
>>> 
>>> before hooks are eval'd in the scope of an example, which is an _instance_ of the example group class. Try using include instead of extend:
>>> 
>>> c.include RSpec::Generator
>>> 
>>> HTH,
>>> David
>>> 
>>> 
>>> 
>>>>   setup_generator 'migration_generator' do
>>>>     tests MigrationGenerator
>>>>   end
>>>> end
>>> 
>>>> it "should generate create_user migration" do
>>>>   with_generator do |g|
>>>>     ...
>>>> end
>>> 
>>>> Whereas now I have to do it like this, which I find a bit ugly and
>>>> cumbersome
>>> 
>>>> it "should generate create_user migration" do
>>>>   RSpec::Generator.with_generator do |g|
>>>>     name = 'create_users'
>>>>   end
>>>> end
>>> 
>>>> Thanks.
>>>> _______________________________________________
>>>> rspec-users mailing list
>>>> rspec-us... at rubyforge.org
>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>> 
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
> 



More information about the rspec-users mailing list