This is standard Ruby scoping (as I’ve pointed out on stack overflow). Phil’s 
answer is a great workaround but I strongly encourage not shadowing the name 
(e.g. call it something else) to prevent confusion around precedence.

I elaborate further on the Stack Overflow post, but shall repeat here.

The parameter passed to the block is available within the block's closure. So 
the evaluated string `"parameter=#{parameter}"` being within the closure works 
just fine.

What you're trying to do the same as is this:

```
b = "Hi!"

def a
puts b
end

a()
# NameError (undefined local variable or method `b' for main:Object)
```

As Phil points out a solution is to wrap parameter in a `let`, which is the 
same (roughly) as doing:

```
b = "Hi!"

def a
puts b
end

define_method(:b) { b }

a()
# Hi!
# => nil
```

Cheers
Jon Rowe
---------------------------
[email protected]
jonrowe.co.uk

On 22 June 2020 at 21:04, Evan Brodie wrote:
> I also asked on Stackoverflow 
> (https://stackoverflow.com/questions/62522543/rspec-shared-example-access-parameter-in-a-helper-method),
>  but I'm posting here too because this is the preferred location to ask for 
> rspec help according to your website: http://rspec.info/help/
>
> ***********************************
>
> Suppose I create an Rspec shared example group with one parameter (the 
> business purpose of the tests are irrelevant, it is an overly simplified 
> version of my current codebase):
>
> shared_examples "some example group" do |parameter|
>
> it "does something" do
>
> puts "parameter=#{parameter}"
>
>
>
> print_the_parameter
>
> end
>
>
>
> def
> print_the_parameter
> puts
> "parameter=#{parameter}"
>
> end
> end
>
> I am able to access the parameter as a variable just fine with the it test 
> block. However, I am running into an "undefined local variable or method" 
> when I try to access parameter from a method. Why is that? I have proven in 
> my codebase (and is prevalently shown in Rspec documentation) that the 
> parameter is available in test blocks, lifecycle methods like before, and in 
> let variable declarations. But why not helper methods?
>
> Thank you.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/dejalu-217-c5c03b8c-4725-4163-8dc7-02fa14515bff%40jonrowe.co.uk.

Reply via email to