[rspec-users] RSpec doesn't see the DATA constant

Costi G. lists at ruby-forum.com
Thu Feb 24 13:37:06 EST 2011


P. A. wrote in post #983523:
> Hi.
>
> In Ruby there's the `DATA` constant which contains the lines following
> the `__END__` keyword in the source file. For some reason RSpec
> doesn't see it.
>
> Here's the example:
>
> ~~~
> # data_spec.rb
>
> requre 'rspec'
>
> describe 'DATA' do
>   it 'contains lines following the __END__ keyword' do
>     DATA.read.should == "Hello from underground!\n"
>   end
> end
>
> __END__
> Hello from underground!
> ~~~
>
> If then I run `$ rspec data_spec.rb`, I'm getting 'NameError:
> uninitialized constant RSpec::Core::ExampleGroup::Nested_1::DATA'.
> However, if I use `$ ruby data_spec.rb` all works fine.

DATA works only on the first file called by the interpreter.

first.rb:
require 'second'

second.rb:
p DATA.read

__END__
BAM!


ruby first.rb
./second.rb:1: uninitialized constant DATA (NameError)
  from first.rb:1:in `require'
  from first.rb:1

ruby second.rb
"BAM!\n"


>
> Why RSpec doesn't see the constant when I use the `rspec` command? How
> can I solve the problem?


The restriction on DATA notwithstanding, DATA in that context will by 
ambiguous. Think about it, is the DATA from the rspec file or the DATA 
from the tested file?

-- 
Posted via http://www.ruby-forum.com/.


More information about the rspec-users mailing list