2011-05-13 1 views
0

웹 페이지에서 트리 컨트롤을 반복합니다. 트리의 일부 노드를 클릭하면 FRAME_C의 내용이 변경되고 다른 노드는 클릭되지 않습니다. 콘텐츠가 변경되었을 때만 실행되도록 테스트를 필터링하려면 어떻게합니까? 다음은 내가 시도한 것입니다 :RSpec : 이전 테스트의 결과에 따라 어떻게 테스트를 암시 적으로 필터링합니까?

내 문제는 RSpec이 모든 테스트를 수행하기 전에 필터를 평가하고 있다는 것입니다. 위의 예제에서는 다른보기? 는 두 개의 전역 변수가 이전 테스트에 의해 아직 설정되지 않았으므로 항상 false를 반환합니다.

내가 원하는 것을 할 수있는 방법이 있습니까? 나는 이것을 며칠 동안 파악하려고 노력해 왔습니다.

답변

1

항상 테스트를 실행해야합니다. 예상 한 코드 경로를 실행하는 데 필요한 상태를 설정해야합니다. 다른 테스트의 결과에 따라 조건부로 테스트를 실행하는 것은 테스트의 영혼을 완전히 파기합니다.

이전보기를 알고 있어야하며 현재보기가 다르며 예상 한 것과 다를 경우 오류가 발생합니다.

모든 테스트에는 코드가 실행될 것으로 예상되는 특정 경로가 있어야하며 그렇지 않은 경우 실패해야합니다. 당신이 그렇게해서는 안되기 때문에 당신이 원하는 것을 할 수있는 방법이 없습니다.

+0

단위 테스트를 위해 나는 당신에게 동의합니다. 나는 단위 테스트를하고 있지 않다. RSpec을 사용하여 자동화되지 않은 코드에 대한 기능 테스트를 자동화했습니다. 또한 Ruby에서 개발되지 않았기 때문에 갑판을 더 쌓아 놓았습니다. 어떤 노드가보기를 변경하고 어떤 노드가 변경되지 않을지 알 수있는 방법이 없습니다. 예제에서 암시 적 필터를 사용하여 네트워크 연결이 있는지 확인한 다음 적절한 경우 건너 뛴 다음 해당 기능을 사용하기를 원했습니다. 그것을 할 수있는 방법이 없다면, 나는 내 자신을 설계해야 할 것입니다. –

+0

나는 당신이 동의하지 않는다. 입력을 기반으로하는 동적 테스트를 원한다면, 예를 들어 입력의 특정 값이 동작을 선언해야하고 다른 유형의 입력에서 다른 종류의 동작을 선언하려는 경우 조건부로 테스트를 실행해야합니다. – MaicolBen

0

저는 rspec에 익숙하지 않지만 Proc을 사용해 보셨습니까? 테스트가 선언입니다 예를 들어 ... 속기로

it "Runs only if the view is different", :if => lambda { viewDifferent? } do 
    puts "Doing some stuff." 
end 

상징도 빨리

it "Runs only if the view is different", :if => :viewDifferent? do 
    puts "Doing some stuff." 
end 

당신은 그것을 가지고

는, 그것은 viewDifferent? 방법을 부르고 ... 작동 할 수 있습니다. 정말로 원하는 것은 Proc을 전달하여 테스트가 일 때 일 때 호출되도록합니다.

+0

나는 결코 람다, 결코 상징으로 그것을 시도했다. 또한 원하는 결과를 얻을 수 없습니다. RSpec의 ": if"는 테스트를 설명 할 때 실행되는 암시 적 필터링 메커니즘으로,이를 실행할지 여부를 식별합니다. 런타임에 동일한 동작을 수행하기 위해 수행 할 수있는 구성 또는 기타가 있기를 바랬습니다. –

+0

기능 요청과 비슷합니다. 그때까지, 당신은 항상 viewDifferent가 아닌 한'돌아올 수 있습니다. '. –

+0

은'예기치 않은 반환 '을 던졌습니다. – MaicolBen