2014-02-16 3 views
0

모듈을 테스트하는 rspec 테스트 스위트에서 모듈을 포함하는 클래스의 동작을 평가하는 테스트가 있습니다. 아래는 보여주기위한 거친 예제입니다.rspec에서 shared_example에 클래스 이름을 전달하는 올바른 방법은 무엇입니까?

describe "MyMod" do 
    module MyMod; end 

    shared_examples_for "a class" do |klass| 
    it "includes the module" do 
     klass.included_modules.include? MyMod.should be_true 
    end 
    end 

    describe "when included in a class" do 
    before(:each) { class C; include MyMod; end } 
    it_behaves_like "a class", C 
    end 

    describe "when extended in a class" do 
    before(:each) { class C; extend MyMod; end } 
    it_behaves_like "a class", C 
    end 
end 

내가 it_behaves_like이 실행될 때 클래스 C이 오류가 발생, 정의되지 않은되고있는 문제 : 클래스를 정의하고 shared_example에 전달하는 올바른 방법을 무엇

`block (2 levels) in <top (required)>': uninitialized constant C (NameError) 

을 ?

답변

0

문제는 공유 예제에 대한 인수가 before 블록이 실행되기 전에 평가된다는 점입니다. 공유 예제를 심볼 :C에 전달하고 상수로 바꾸거나 예를 들어 다른 변수를 설정하는 블록을 전달해야합니다 (예 : https://www.relishapp.com/rspec/rspec-core/v/2-11/docs/example-groups/shared-examples#providing-context-to-a-shared-group-using-a-block)

+0

예 감사합니다. 책을 읽는 것으로 많은 의문점이 있습니다. . 나는'extend'에서 작동하지만'include'에 대한 에러를주는'let (: klass) {Class.new.extend (MyMod)}'를 시도했습니다 : "private method'include 'called". 나는 다른 접근법을 사용할 것이라고 생각한다. – starfry

관련 문제