2013-04-18 2 views
2
# models/event.rb 
class Event < ActiveRecord::Base 
    # ... 
end 

# models/event/timeline.rb 
class Event::Timeline 
    # ... 
end 

# spec/event/timeline_spec.rb 
require 'spec_helper' 
require 'models/event/timeline' # <- fails since "event" is not required 

describe Event::Timeline do 
    it '' do 
    # ... 
    end 
end 

require 'event'은 사양에 부합되지 않는 모든 종속성을 필요로하므로 의미가 없으므로네임 스페이스 클래스를 지정할 때 어떻게 부모 클래스를 스텁합니까?

+0

나는 이것을 수행해야한다고 생각하지 않습니다. 부모 클래스를로드하기 만하면됩니다. 코드는 프로덕션 환경에서도 테스트해야하며 그 밖의 모든 것은 쓸모가 없습니다.) – mbj

+0

나는 다른 모든 것들과 Event :: Timeline을 분리하고 있습니다. 이것은 통합 테스트보다 단위 테스트입니다. – Kris

+0

그러나 모든 하위 클래스는 상위 클래스와 상호 작용해야합니다. 그렇지 않으면 하위 클래스에 대한 이유가 없습니다. – mbj

답변

1

당신은 RSpec에에서 stub_const 방법을 사용하십시오 마리안이 제안

https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/mutating-constants

그러나 아마 간단 그냥 class Event; end를 사용 할 수 있습니다.

귀하의 의견에 따라 describe 블록 위에 신고해야합니까? 아마도 시도하지 않을 경우

describe Event::Timeline do 
    let(:fake_class) { Class.new } 

    before do 
    stub_const("Event", fake_class) 
    end 

    it '' do 
    end 
end 
+0

'it' 블록 밖에서'stub_const'를 사용할 수 없습니다. 나는'class Event; 'Event'가 이미 다른 하위 클래스 ('ActiveRecord :: Base'가 아닌'Object')로 정의되었으므로 다른 스펙을 깰 수 있습니다. – Kris