2014-09-11 8 views
0

배경의 단계는 예제와 결합 할 수 없습니다. 그것은 Behat의 한계입니까?배경의 단계를 Behat의 예제와 결합 할 수없는 이유

다음 기능 파일이 있습니다.

Background: 
     Given I have the login Page 
     When I login to the application using "<username>" 
     Then the list is displayed 
     When I select an item from the list 
     Then I am taken to the Dashboard 
     When I navigate to the Overview Page 
     Then the Overview Page is displayed 

@javascript @frontend @devlocal 
Scenario Outline: To verify the Overview page content 
     Then overview page main headings are displayed 
Examples: 
     | username | role   | 
     | RoleUser | ROLE_USER  |  
     | RoleAdmn | ROLE_ADMIN | 

이 오류 발생 : [Behat \ 작은 오이 \ 예외 \의의 ParserException]
예상 설명 또는 시나리오 또는 개요 또는 단계 토큰을하지만 라인의 예를 가지고 : 파일에 15의 경우 :/var/기능/개요 .feature

"Background (배경)"에서 너무 많은 단계가있는 이유는 이것이 페이지로 이동하는 논리적 흐름이기 때문입니다. 그리고 이러한 단계를 사용하여 여러 가지 시나리오가 있습니다.

"시나리오"의 "백그라운드"에서 모든 단계를 사용하는이 문제에 대한 해결 방법이 있습니다. 이것은 절대적으로 잘 작동합니다. 그러나 나는이 기능에 대해 5 가지 시나리오를 가지고 있으며 5 가지 시나리오 모두에서 동일한 단계를 복사하여 붙여 넣으면 절대적으로 복잡하고 성가신 것처럼 보입니다. 이것이 배경 섹션을 사용하는 주된 이유라고 생각했습니다. 여기

내가 지금 사용하고 무엇을 :

배경 : 내가

@javascript @frontend @devlocal 
Scenario: To verify the Overview page content 
     When I login to the application using "<username>" 
     Then the list is displayed 
     When I select an item from the list 
     Then I am taken to the Dashboard 
     When I navigate to the Overview Page 
     Then the Overview Page is displayed 
     Then overview page main headings are displayed 
Examples: 
     | username | role   | 
     | RoleUser | ROLE_USER  |  
     | RoleAdmn | ROLE_ADMIN | 

는 다른 모든 시나리오에 대한 시나리오 섹션에서 모든 단계를 상상해 로그인 페이지에게이 주어

답변

1

시나리오 외곽선이 없으면 지저분하고 성가 시게됩니다. 나는이 문제와 관련 될 수있다. 그러나 이것은 그저 작동하는 방식 일 뿐이다. 시나리오 배경은이 기능의 모든 시나리오와 결합되어야하며 독립 실행 형 블록으로 작동해야합니다. 5 가지 시나리오 개요와 하나의 시나리오가있는 경우 배경이 <username>으로 무엇을해야할지 모르기 때문에이 기능은 작동하지 않습니다.

이론상 이것은 매우 쉽게 구현할 수 있지만 Behat 코드에 조금 익숙해지면 이것이 매우 매우 큰 변화라고 생각합니다. 사실 this issue을 제기하여 새로운 기능 요청을 제안했습니다. 그런 것을 갖는 것이 좋을 것입니다. 당신은 구독하고 그것에 대해 사람들이 말하는 것을 볼 수 있습니다. 나는 이것의 차가운 요소가 복잡성을 이기지 못할 것이라고 거의 확신한다.

다른 한편으로는이 논리를 다른 단계로 결합하여 거기에서 필요한 매개 변수를 전달하는 것을 멈추게하는 요소는 없습니다. 표준 방법으로 밍크 및 호출 단계의 다른 컨텍스트에 액세스 할 수 있어야합니다. 기능에서 컨텍스트로 로직을 이동하면 약간의 문제는 해결되지만, 이는 약간 해킹 된 것이므로 훨씬 나은 방법은 아닙니다. 사실 나는 당신이 현재 갖고있는 것과는 아무런 문제가 있다고 생각하지 않습니다.

또한 논리 관점에서 볼 때 백그라운드에서 너무 많은 내용을 테스트하려고합니다. 대신, 백그라운드에서 진행되는 모든 것을 테스트하는 또 다른 시나리오를 만들 수 있으며, 다른 시나리오에서는 6 개가 아닌 처음 두 단계 만 수행 할 수 있습니다 (When I login to the application using "<username>"Then I successfully navigate the Overview Page is displayed).

+0

감사합니다. Ian. 6 단계를 2 단계로 결합하면 무엇을 의미합니까? 이것은 6 단계의 모든 논리를 2로 결합한다는 것을 의미합니까? 이것은 약간의 중복성이 아닌 것입니다 (다른 시나리오에 대해 동일한 코드를 다시 작성함). –

+1

배경에 각 윤곽에 "상속 된"공통 논리가 있습니다.이 공통 로직을 백그라운드에서 다른 시나리오로 분리 할 수 ​​있으므로 백그라운드 단계가 각 시나리오 개요에서 통과하는지 확인하는 대신 별도의 시나리오 개요에서 동일하게 수행 할 수 있으므로 다른 모든 다섯 가지 시나리오 개요의로드가 줄어 듭니다. 로그인이 필요하고 시나리오 별 테스트가 시작되는 페이지로 이동하면됩니다. –

+1

코드에서 동일한 문자를 사용하면 일부 측면에서 중복으로 간주 될 수도 있습니다. 당신은 한계가 있으며 가능한 한 자신을 반복 할 수있는 방법을 찾고 싶습니다. 코드를 재정렬하여 DRY가되도록 만들면 상당히 개선 될 수 있습니다. –