Rhett Sutphin
2010-Nov-03 22:49 UTC
[rspec-users] Constant resolution fails in describes inside of modules using rspec 2 on ruby 1.9.1
Hi,
I''ve converted a couple of my smaller libraries'' spec suites
to rspec 2 with no trouble. (I''m enjoying the new version -- thanks to
all involved.) I''m trying to convert one a larger suite now and
I''ve run into two problems on ruby 1.9.1 (but not 1.8.7) related to
constant resolution in describes inside of modules. One of the problems
haven''t been able to reproduce in a simple test case, but the other one
I have. Here''s the reproducible one:
# ---- baz_spec.rb
module Foo
module Quux
class Baz
def name
"noise"
end
end
end
end
module Foo::Quux
describe Baz do
it "has a name" do
Baz.new.name.should == ''noise''
end
end
end
# ----
This spec passes on rspec 2.0.1 and 1.3.0 on Ruby 1.8.7:
----
$ ruby -v
ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0]
$ spec _1.3.0_ baz_spec.rb
.
Finished in 0.002011 seconds
1 example, 0 failures
$ rspec _2.0.1_ baz_spec.rb
.
Finished in 0.00077 seconds
1 example, 0 failures
----
It also passes on rspec 1.3.0 on Ruby 1.9.1. On rspec 2.0.1, it fails:
----
$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10.3.0]
$ spec _1.3.0_ baz_spec.rb
.
Finished in 0.020187 seconds
1 example, 0 failures
$ rspec _2.0.1_ baz_spec.rb
F
Failures:
1) Foo::Quux::Baz has a name
Failure/Error: Baz.new.name.should == ''noise''
uninitialized constant RSpec::Core::ExampleGroup::Nested_1::Baz
# ./baz_spec.rb:14:in `block (2 levels) in <module:Quux>''
Finished in 0.00159 seconds
1 example, 1 failure
----
Is this a bug or expected behavior in rspec 2? I''ll file an issue if
it''s a bug -- this would be against rspec-core, correct?
Thanks,
Rhett
Justin Ko
2010-Nov-03 23:59 UTC
[rspec-users] Constant resolution fails in describes inside of modules using rspec 2 on ruby 1.9.1
Use ruby 1.9.2 - sorry on my iphone On Nov 3, 4:49?pm, Rhett Sutphin <rh... at detailedbalance.net> wrote:> Hi, > > I''ve converted a couple of my smaller libraries'' spec suites to rspec 2 with no trouble. ?(I''m enjoying the new version -- thanks to all involved.) ?I''m trying to convert one a larger suite now and I''ve run into two problems on ruby 1.9.1 (but not 1.8.7) related to constant resolution in describes inside of modules. ?One of the problems haven''t been able to reproduce in a simple test case, but the other one I have. ?Here''s the reproducible one: > > # ---- baz_spec.rb > > module Foo > ?module Quux > ? ?class Baz> ? ? ?def name > ? ? ? ?"noise" > ? ? ?end > ? ?end > ?end > end > > module Foo::Quux > ?describe Baz do > ? ?it "has a name" do > ? ? ?Baz.new.name.should == ''noise'' > ? ?end > ?end > end > > # ---- > > This spec passes on rspec 2.0.1 and 1.3.0 on Ruby 1.8.7: > > ---- > $ ruby -v > ruby1.8.7(2010-08-16 patchlevel 302) [i686-darwin10.4.0] > $ spec _1.3.0_ baz_spec.rb > . > > Finished in0.002011seconds > > 1 example, 0 failures > $ rspec _2.0.1_ baz_spec.rb > . > > Finished in 0.00077 seconds > 1 example, 0 failures > ---- > > It also passes on rspec 1.3.0 on Ruby 1.9.1. ?On rspec 2.0.1, it fails: > > ---- > $ ruby -v > ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10.3.0] > $ spec _1.3.0_ baz_spec.rb > . > > Finished in0.020187seconds > > 1 example, 0 failures > $ rspec _2.0.1_ baz_spec.rb > F > > Failures: > ?1) Foo::Quux::Baz has a name > ? ? Failure/Error: Baz.new.name.should == ''noise'' > ? ? uninitialized constant RSpec::Core::ExampleGroup::Nested_1::Baz > ? ? # ./baz_spec.rb:14:in `block (2 levels) in <module:Quux>'' > > Finished in 0.00159 seconds > 1 example, 1 failure > ---- > > Is this a bug or expected behavior in rspec 2? ?I''ll file an issue if it''s a bug -- this would be against rspec-core, correct? > > Thanks, > Rhett > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
Myron Marston
2010-Nov-04 17:29 UTC
[rspec-users] Constant resolution fails in describes inside of modules using rspec 2 on ruby 1.9.1
You can reorganize it a bit in a way that will work on 1.8.7, 1.9.1
and 1.9.2:
module Foo
module Quux
class Baz
def name
"noise"
end
end
end
end
describe Foo::Quux::Baz do
it "has a name" do
described_class.new.name.should == ''noise''
end
end