Rails模型与RSpec冲突

时间:2011-03-31 12:35:36

标签: ruby-on-rails ruby rspec2

我正在尝试让我的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课程(注意:它不在模块中,因此我不知道如何对其进行限定)。

1 个答案:

答案 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