2011-03-31 5 views
0

레일스 애플리케이션의 RSpec 테스트를 다시 작동 시키려고합니다. 내가 말할 수있는 한, 그들이 녹색이었을 때와 현재 유일했을 때의 유일한 차이점은 내가 지금 루비 1.9를 사용하고있는 반면, 루비 1.8.7을 사용했다는 것입니다.레일 모델이 RSpec으로 충돌합니다

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 

가 (예, 나는 관찰자를 테스트하기위한 변경 인스턴스를 필요) :

나는 모델 스펙을 사용

class Change < ActiveRecord::Base 
... 
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에서 모듈을로드하는 방식과 다른 점이 있습니까? 어떻게하면 requireChange 클래스 (참고 : 그것은 모듈 내부가 아니므로 자격을 얻는 방법을 모르겠습니다).

답변

2

RSpec의 Change 클래스가 모듈 RSpec::Matchers에 있기 때문에 ::Change을 사용하여 최상위 네임 스페이스를 나타냅니다. 그대로 :

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 
관련 문제