2011-09-28 5 views
1

Behat에 관한 BDD 및 this instructions부터 시작하겠습니다.하지만 조금 더 복잡한 예제가 누락되었습니다. 제품 카테고리 예제가 너무 간단합니다 (단, 처음에는 이 필요합니다). 물론 ..)이 어떻게 .. 넘어 하기 위해 고유 필드가없는 내가 모델로 일하고 있어요BDD로 시작하기 (배경으로 Behat 및 Symfony2 사용)

을 가고 싶을 때 : 내가 가진 내 경우에는

$product = this->getRepository('AcmeDemoBundle:Product')->findOneByName($productName); 

을 관계 1 : 1 :

Room 
    hotel_id 
    ... 

Default configuration 
    room_id 
    name //"single room", "double room"... 
    price 
    ... 
내가 시나리오를 생성 할 때

그래서, "시나리오 : 방은 기본 구성이"나는 이런 식으로 시작하고 싶습니다 :

I have a room XXX 

을하지만 난 내가하지 않아도 할 수 없기 때문에 "이름"또는 고유 한 다른 같은 모든 필드는 그래서 난 그냥 쓰기 :

I have a room 

문제는 온다 내가 예를 들어 제품 카테고리 에 같은 기본 구성을 추가하는 방을 검색 할 때 ($ product = $ this-> getRepository ('AcmeD emoBundle : Product ') -> findOneByName ($ productName);), 어떻게 처리해야할지 모르겠다. 기본 구성을 추가하는 방 객체를 검색하는 방법은 무엇입니까? 또는 기본 구성 객체를 검색하는 방법은 무엇입니까?

그래서 어떤 생각을해야합니까?

편집 : 나는 내가 관심이있는 시나리오를 추가 할 everzet의 반응 후

구현 :

When I add a default configuration to a room 
Then I should find a room has a default configuration 

어쩌면이 시나리오는 이상한 소리,하지만 위의 말했듯이, 나는 방과 기본 구성 모두에서 고유 한 필드가 없어야합니다.

내 .feature 파일의 기능은 무엇이되어야합니까?

답변

1

모든 시나리오 단계 정의는 단일 컨텍스트 클래스 인스턴스 내에서 실행되며 모든 시나리오에는 고유 컨텍스트 인스턴스가 있습니다. 즉, 현재 컨텍스트에서 ivars를 한 단계 정의로 설정하고 다음 단계 정의에서이 값을 읽을 수 있습니다.

귀하의 경우 I have a room 단계는 마지막으로 저장된 레코드 ID를 컨텍스트 ivar에 저장하고 다음 단계는 데이터베이스에서 특정 (마지막으로 추가 한) 공간을 찾기 위해 값을 사용할 수 있습니다. 이렇게 :

// Given I have a room 
// … 
$room = new Room(); 
$em->persist($room); 
$em->flush(); 
$this->lastRoomId = $room->getId(); 
// … 

// Then this room should have ... 
// … 
$room = $em->getRepository('AcmeDemoBundle:Room') 
    ->findOneById($this->lastRoomId); 
// … 
+0

안녕하세요 everzet, 내 질문에 내 시나리오를 썼습니다. – ziiweb

+0

희망 사항 ;-) 귀하의 질문에 대답했습니다. – everzet