2013-01-23 3 views
3

제품 검색 양식을 테스트하고 있습니다. 제품은 다른 매개 변수 (예 : 상태, 재질,와이트 등)로 검색 할 수 있습니다. 상태별로 검색하려면 다음을 수행하십시오.전체를 반복하는 방법 <select> behat/mink의 필드 옵션

Scenario Outline: search by status 
    When I select "<status>" from "search_form_status" 
    And I press "Search" 
    And I wait for 3 seconds      // implemented 
    And I follow random link from test result table // implemented 
    Then I should see "<status>" in the "div#status" element 
Examples: 
    |status | 
    |enabled | 
    |disabled| 

모든 것이 정상입니다. 그러나 동일한 검색을 테스트 해보고 싶다면 product material은 언제든지 변경 될 수있는 주제 (제품 소재가 필요하거나 재료 이름을 편집하거나 오래된 미사용 제품을 삭제할 수 있음)와 같은 제품 소재로 고착되어 있습니다. 테스트 환경과 생산 현장에서 재료가 다를 것이라는 사실을 추가하십시오.

Given I select product material 

그리고이 같은 foreach 루프와 단계를 구현 : 는 내가 뭔가를 할 수 있다는 사실을 알고

$matList = $this->getSession()->getPage()->findAll('css', "select option"); 
    foreach($matList as $material){ 
     // DO SOMETHING 
    } 
} 

하지만이 status 예처럼 다른 모든 단계를 작성 얼마나? 사용자 지정 단계를 따르는 단계에 대해 내 search.feature 파일에서 다음 단계에서 $material 변수를 사용하려고한다고 가정합니다. 그러나 나는 그것을 어떻게합니까? 모든 옵션 목록을 반복하고 각 반복마다 단계를 수행하려면 어떻게해야합니까?

+0

당신은 하나의 테스트 케이스에 모든 기능을 테스트 할 필요가 없습니다. 모든 단일 테스트가 한 가지만 테스트하고 좋은 결과를 얻을 수 있도록 코드를 테스트 해보십시오 (가능하지 않은 경우 리팩터링하십시오). 귀하의 경우, 재료 시험을 작성하고 의미가있는 두 가지 사례를 정의 할 수 있습니다. - 재료 없음 (가능할 경우) - 최소 재료 수 - 재료 평균 세트 2 세트 - 최대 (정의 된 경우) 재료 세트 재료 번호, 재료 이름 등을 변경하는 것은 그 목적을 위해 특별히 만들어진 별도의 테스트에서 테스트 할 수 있습니다. 환영합니다! :) – Alexander

+1

나는 당신이 나를 이해하지 않는 것 같아요. 한 가지 기능 (재료로 제품 검색) 만 테스트하고 싶습니다. 그리고 내가 갖고있는 재료와 그 중 얼마나 많은 재료가 있는지를 알 수는 없습니다. –

답변

3

당신은 모든 옵션을 선택하는 코드가 포함 된 메서드 내 원하는 개별 단계를 실행하는 PHP 코드를 작성해야합니다. 예를 들어

:

$handler = $this->getSession()->getSelectorsHandler(); 

$optionElements = $this->getSession()->getPage()->findAll('named', array('option', $handler->selectorToXpath('css', 'select)); 

foreach ($optionElements as $optionElement) { 
    $this->getSession()->getPage()->selectFieldOption('portal', $optionElement->getValue()); 
    $this->pressButton("show"); 
    $this->assertPageContainsText(" - Report Report"); 
}