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

Shamaoke shamaoke at hotmail.com
Thu Feb 24 19:26:47 EST 2011


Thanks for the explanations, Costi G. I didn't thought that the `DATA`
constant isn't seen by the interpreter if it is in the required file.

The only solution that I can think of right now is the following:

~~~
# data_spec.rb

describe 'DATA' do
  it 'contains lines following the __END__ keyword' do
    data = File.read(__FILE__).split("__END__\n")[-1]
    data.should == "Hello from the underground!\n"
  end
end

__END__
Hello from the underground!
~~~

Costi G.:
> 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/.
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users


More information about the rspec-users mailing list