2017-11-10 34 views
0

FooContext 클래스를 사용하는 올바른 방법은 무엇입니까? 그것은 docs입니다 무엇Behat에서 컨텍스트 사용 - 올바른 접근 방식

:

상황에 맞는 클래스에 대한 간단한 니모닉은 "문맥에서 테스트 기능". (...), 당신은 거의 그 기능을 테스트 할 방법은 당신이에서 테스트 상황에 따라 달라집니다. 워드 프로세서에서

당신이 빠르게 만들 수 있도록 나를 단지 더미 컨텍스트 파일을 할 수 있도록 FeatureContext 보인다 행동 테스트.

컨텍스트 클래스는 FeatureContext라고해야합니다. Behat 인프라 내에서 간단한 컨벤션입니다. FeatureContext는 기본 제품군에 대한 컨텍스트 클래스의 이름입니다.

기능마다 컨텍스트 파일이어야한다는 직접적인 말은하지 않습니다.

doc의 유일한 실제 예는 ApiContext 또는 WebContext과 같은 컨텍스트입니다. 나는 또한 무엇을 발견

default: 
    suites: 
     web_features: 
      paths: [ %paths.base%/features/web ] 
      contexts: [ WebContext ] 
     api_features: 
      paths: [ %paths.base%/features/api ] 
      contexts: [ ApiContext ] 

CommandFeature 다른 CommandLineProcessContext했다.

그래서 테스트 할 많은 기능이 있다면 컨텍스트 파일이 매우 빠르게 폭발합니다.

그러면 기능 예제 당 컨텍스트 파일이 Marco Pivetta 일 가능성이 높습니다. Aggregate as Context입니다.

기능 당 하나의 컨텍스트 파일을 가지고있는 것이 좋습니다 foo.feature? 또는 컨텍스트 파일이 문서 ApiContext 또는 WebContext과 같은 환경 컨텍스트라고 생각합니까?

  • 한 기능/컨텍스트 파일이에 수행 할 수있는 각 작업에 대한 각 도메인의 주제에 대한
    • 한 폴더

    과목

    다음과 같이

  • 답변

    1

    보통 나는 컨텍스트를 분할하는 것을 선호하고 있습니다 그렇게하면 하나 이상의 컨텍스트를 사용하지만 모든 컨텍스트가 단일 책임으로 나뉘어있는 단일 제품군으로 끝납니다.

    빠른 예를

    각 제품군이 많은 상황으로 구성되어
    Features 
    |--- User 
    |----- login.feature 
    |----- change_password.feature 
    |----- impersonate.feature 
    |----- ban.feature 
    |----- ... 
    |--- ... 
    |--- Order 
    |----- checkout.feature 
    |----- cancel.feature 
    ... 
    Context 
    |--- User 
    |---- LoginContext 
    |---- ChangePasswordContext 
    |---- ImpersonateContext 
    |---- BanContext 
    |---- ... 
    |--- Order 
    |---- CheckoutContext 
    |---- CancelContext 
    

    (예를 들어,이 동작을 확인하기 위해 로그인해야 할 때마다, 당신은 당신의 스위트 LoginContext을 포함 할 것이다).

    default: 
        suites: 
        suite_name: 
         paths: 
         - '%paths.base%/Path/To/Feature/File' 
         contexts: 
         - Path\To\Context\LoginContext 
         - Path\To\A\SecondContext 
         - ... 
    

    이 접근법은 유지 보수성, 직관력 등의면에서 많은 이점이 있습니다.

    이 주제에 더 일반적인 파노라마를하고 싶은 경우

    을 수행 할 수 있습니다 귀하의 답변에 대한 check slides from my talk at Symfony day 2017 in Milan

    +0

    감사합니다. 'ApiContext'는 20 종점 (성장) API를 가지고 있습니다. 그렇다면 모든 엔드 포인트에 대한 단일 'ApiContext'파일 대신에 엔드 포인트 당 컨텍스트를 만드는 것이 좋습니다. –

    +1

    @FabianPicone 그렇게 할 것을 강력히 제안합니다. 어쩌면 UI에서 Model로 API 컨텍스트 (설명 된 모든 부문 조언이 유효한 매크로 구분)와 각 API 컨텍스트를 주제 및 액션으로 나눌 수 있습니다 (이 경우 액션이 적합하지 않을 수 있으며 주제 당 단일 API 컨텍스트). 하나 이상의 API 주제가 필요한 경우이를 스위트로 구성 할 수 있습니다. – DonCallisto