I know why now. It was me to blame (of course). Error message about
the VERSION constant and the Diff is not a module could be more clear
though. There''s something strange going on in the Spec module check in
core/configuration.rb
I narrowed it down to a small example:
Given:
module MyModule
class Spec
# my spec implementation
end
class Diff
# my Diff implementation
end
end
When a spec includes the module like so:
require ''my_module''
include MyModule
describe "collisions" do
it "collides with Diff class" do
1.should == 1
end
end
Then rspec spits out the errors:
/var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/
configuration.rb:393: warning: toplevel constant VERSION referenced by
MyModule::Spec::VERSION
and
/var/lib/gems/1.8/gems/diff-lcs-1.1.2/lib/diff/lcs.rb:16: Diff is not
a module
When an example group includes module like so:
require ''my_module''
describe "collisions" do
include MyModule
it "collides with Diff class" do
1.should == 1
end
end
Then the spec runs without errors
When the example group is put in the same module like so:
require ''my_module''
module MyModule
describe "collisions" do
it "collides with Diff class" do
1.should == 1
end
end
end
Then the spec runs without errors
So yep it was my fault. Sorry for blaming rspec. Apparently it is not
a good idea to include a module in the spec file outside of the
example groups.
What made me put the blame on rspec a few hours looking for clues in
rspecs error messages and code. Took me a while to narrow it down to
its essence.
Cheers
Rob
On Mar 18, 10:57?pm, Rob Westgeest <rob.westge... at gmail.com>
wrote:> Hi,
>
> A project of mine is using Runt expressions to match dates. When
> upgraded my rake tasks to 2.5.1 (from 1.3.0) it get this
>
> /usr/bin/ruby1.8 -S rspec spec/delivery_spec.rb spec/reporter_spec.rb
> spec/mysql_dump_spec.rb spec/string_ext_spec.rb spec/
> backup_configuration_spec.rb spec/postgres_dump_spec.rb spec/
> system_command_spec.rb spec/archive_spec.rb spec/
> configuration_dsl_spec.rb spec/mailer_spec.rb spec/backup_spec.rb spec/
> intake/runt_spec.rb spec/intake/date_spec.rb
> /var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/
> configuration.rb:393: warning: toplevel constant VERSION referenced by
> Runt::Spec::VERSION
> /var/lib/gems/1.8/gems/diff-lcs-1.1.2/lib/diff/lcs.rb:16: Diff is not
> a module (TypeError)
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
> `gem_original_require''
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
`require''
> ? ? ? ? from /var/lib/gems/1.8/gems/rspec-expectations-2.5.0/lib/rspec/
> expectations/differ.rb:1
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
> `gem_original_require''
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
`require''
> ? ? ? ? from /var/lib/gems/1.8/gems/rspec-expectations-2.5.0/lib/rspec/
> expectations.rb:9
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
> `gem_original_require''
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
`require''
> ? ? ? ? from
/var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/expecting/
> with_rspec.rb:1
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
> `gem_original_require''
> ? ? ? ? from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in
`require''
> ? ? ? ? from /var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/
> configuration.rb:173:in `expectation_frameworks''
> ? ? ? ? from /var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/
> configuration.rb:380:in `configure_expectation_framework''
> ? ? ? ? from /var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/
> command_line.rb:20:in `run''
> ? ? ? ? from
/var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/runner.rb:
> 55:in `run_in_process''
> ? ? ? ? from
/var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/runner.rb:
> 46:in `run''
> ? ? ? ? from
/var/lib/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/runner.rb:
> 10:in `autorun''
> ? ? ? ? from /var/lib/gems/1.8/bin/rspec:19
> ....
>
> So it seams that Runt::Spec collides with the old Spec namespace
> checking code (there''s no VERSION constant in Runt::Spec) and the
> Runt::Diff class in collides with the Diff module from diff-lcs. This
> should not be the case as both Spec and Diff in Runt are namespaced
> Runt.
>
> I don''t really understand all the magic going on in RSpec but i
> believe RSpec is to blame here. Am i right?
>
> Cheers
>
> Rob
> _______________________________________________
> rspec-users mailing list
> rspec-us... at
rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users