2012-10-25 4 views
2

다른 컨텍스트에서 동일한 그룹의 테스트를 실행하는 좋은 방법을 알고 계십니까? 다음은 두 개의 다른 설정으로 동일한 테스트를 실행하려는 우스운 예입니다. 다른 설정을 할 수 있도록 동일한 테스트를 반복하지 않아도됩니다.다른 설정으로 동일한 테스트를 여러 번 실행하십시오.

context 'cat' do 
    setup do 
    @object = cat 
    .... 
    end 

    should 'walk' do 
    assert @object.walk? 
    ... 
    end 

    should 'run' do 
    assert @object.run? 
    ... 
    end 
end 

context 'dog' do 
    setup do 
    @object = dog 
    .... 
    end 

    should 'walk' do 
    assert @object.walk? 
    ... 
    end 

    should 'run' do 
    assert @object.run? 
    ... 
    end 
end 

답변

3

이전에 merge_block으로 처리했습니다. Proc의 should를 반환하는 클래스 메서드를 테스트에 정의한 다음 적절한 위치에 병합하십시오.

def self.walk_and_run 
    Proc.new do 
    should 'walk' do 
     assert @object.walk? 
    end 
    should 'run' do 
     assert @object.run? 
    end 
    end 
end 

context 'cat' do 
    setup do 
    @object = cat 
    end 
    merge_block(&walk_and_run) 
end 

context 'dog' do 
    setup do 
    @object = dog 
    end 
    merge_block(&walk_and_run) 
end 
+0

이 방법이 유용하지만 상황에 따라 프로 시저를 옮기는 데 어려움을 겪고 있습니다. 따라서 테스트가 복잡해집니다. proc을 컨텍스트로 옮기면 merge_block 문에서이를 참조하는 방법을 알 수 없습니다. 내가 무슨 뜻인지 알지? –

+0

네가 무슨 뜻인지 알아. 그것은 클래스 메소드가되어야하므로 컨텍스트 외부에서 살아야합니다. Proc가되도록 컨텍스트에서 변수를 설정하고 Proc를 리턴하는 메소드로 정의하는 대신 병합 할 수 있습니다. 그래도 조금 더러워 보일 수도 있습니다. – Shadwell

관련 문제