2011-03-31 118 views
0

我试图让我的Rails应用程序的RSpec测试重新开始工作。据我所知,当他们是绿色的时候和现在唯一真正的区别是我现在使用的是Ruby 1.9,而他们曾经使用红宝石1.8.7。与RSpec的Rails模型冲突

我有一个模型

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 

(是的,我需要进行测试的观察者变化实例)。

这些规格失败:

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],但它没有这样做,所有的时间(我相信它与红宝石1.8.7工作)。有没有什么不同的方式在1.9加载模块的红宝石?我怎么能require我自己的Change类(注意:它不在一个模块内,所以我不知道如何限定它)。

回答

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