On Sun, Apr 28, 2013 at 8:33 PM, Adam Gotterer <[email protected]> wrote:
> The example would be pretty specific to my app. But here's a shot at a
> simplification... I have an app with multiple modules. This particular
> module is responsible for parsing different types of input data. Each
> parser has it own data types, but there are some that are common. There's a
> separate spec for each parser. The goal was to essentially namespace a
> group of shared examples that I could then be referenced with a behaves
> like.
>
> It seems like the "proper" way would be to put all the shared examples,
> customer matchers, shared methods and variables on the global level. The
> downside is that I'll have to namespace all the examples, method and
> variable names (other modules make references to similar names). Including
> them in tests will be cumbersome since you will need to explicitly include
> each example individually instead of including the whole group (shared
> context).
>
> While what I came up with may not be perfect. It actually works well minus
> the annoying warnings. Do you think theres a better approach? Thanks!
>
It's very difficult to discuss these ideas without a concrete example, but
from what you've described, what I would do is:
shared_examples_for 'group_a' do
...
end
shared_examples_for 'group_a' do
...
end
shared_context 'some_context' do
let(:some_var) { ... }
matcher :some_matches { ... {
end
describe "something" do
include_context "some context"
it_behaves_like "group_a"
it_behaves_like "group_b"
end
This gives you the outcome you're looking for (I think) without nesting
the shared examples within the shared context, but resulting in applying
the shared context to each of the shared examples. Make sense?
HTH,
David
>
>
> On Saturday, April 27, 2013 11:57:38 PM UTC-4, [email protected] wrote:
>
>> shared_examples are definitely not intended to be used that way.
>>
>> Can you give a more concrete example of what you're trying to accomplish?
>>
>>
>> On Sat, Apr 27, 2013 at 5:59 PM, Adam Gotterer <[email protected]> wrote:
>>
>>> I have a bunch of shared_examples that I've put in a shared context. The
>>> setup works but running them causes an rspec WARNING: Shared example group
>>> '...' has been previously defined at:... Which makes me assume there might
>>> be a better way. Was curious if there is?
>>>
>>> Simple example:
>>>
>>> shared_context 'some_context' do
>>> let(:some_var) { ... }
>>> matcher :some_matches { ... {
>>>
>>> shared_examples_for 'group_a' do
>>> ...
>>> end
>>>
>>> shared_examples_for 'group_b' do
>>> ...
>>> end
>>> end
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "rspec" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to rspec+un...@**googlegroups.com.
>>> To post to this group, send email to [email protected].
>>>
>>> To view this discussion on the web visit https://groups.google.com/d/**
>>> msg/rspec/-/RSW0nfr1apwJ<https://groups.google.com/d/msg/rspec/-/RSW0nfr1apwJ>
>>> .
>>> For more options, visit
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>>
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rspec/-/w72JsYQdWSYJ.
>
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>
--
You received this message because you are subscribed to the Google Groups
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.