我正在尝试让我的Rails应用程序的RSpec测试恢复工作。据我所知,当它们是绿色和现在之间唯一真正的区别是我现在使用ruby 1.9,而他们曾经使用红宝石1.8.7。
我有一个模特
class Change < ActiveRecord::Base
...
end
用于规范:
describe ChangeObserver do
let (:c) { Change.new(:comment => "Test", :originator => "x.y")}
it "finds affected modules for a change" do
c.should_receive(:affected).and_return([])
c.save
end
end
(是的,我需要一个用于测试观察者的Change实例)。
这些规格失败了:
1) ChangeObserver finds affected modules for a change
Failure/Error: c.save
NoMethodError:
undefined method `save' for #<RSpec::Matchers::Change:0x3c8e5f0>
显然我的Change
类与[RSpec::Matchers::Change][1]
冲突,但它并没有一直这样做(我确信它与ruby 1.8.7一起使用)。 ruby在1.9中加载模块的方式有什么不同吗?我怎样才能require
我自己的Change
课程(注意:它不在模块中,因此我不知道如何对其进行限定)。
答案 0 :(得分:2)
使用::Change
表示顶级命名空间,因为RSpec的Change
类在模块RSpec::Matchers
内。如此:
describe ChangeObserver do
let (:c) { ::Change.new(:comment => "Test", :originator => "x.y")}
it "finds affected modules for a change" do
c.should_receive(:affected).and_return([])
c.save
end
end