2011-03-31 91 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