Начиная с BDD (используя Behat и Symfony2 в качестве фона) - PullRequest
1 голос
/ 28 сентября 2011

Я только начинаю с BDD и этой инструкции о Behat, но мне не хватает примера, более сложного, пример Product-Category слишком прост (но сначала необходим, конечно, ..)когда вы хотите выйти за рамки ..

Я работаю с моделями, которые не имеют уникального поля для того, чтобы сделать это:

$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-Category ($ product = $ this-> getRepository ('AcmeDemoBundle: Product') -> findOneByName ($ productName);) , я не знаю, что делать.., как получить объект комнаты, который я использую, чтобы добавить конфигурацию по умолчанию?или как получить объект конфигурации по умолчанию?

Итак, есть идеи, как мне действовать?

РЕДАКТИРОВАТЬ:

После ответа everzet Iхочу добавить сценарий, который меня интересует, чтобы реализовать:

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

Возможно, этот сценарий звучит странно, но, как я уже сказал выше, у меня нет уникального поля ни в Room, ни в Default Configuration.

Итак, какими должны быть функции в моем файле .feature?

1 Ответ

1 голос
/ 28 сентября 2011

Все ваши определения шагов сценария выполняются внутри одного экземпляра класса контекста, и каждый сценарий имеет свой собственный экземпляр контекста. Это означает, что вы можете установить ivars для текущего контекста в одном шаге определения и прочитать его значение в следующем шаге определения. Это даже описано в документации Behat; -)

В вашем случае ваш шаг I have a room может сохранить последний сохраненный идентификатор записи в контексте 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);
// …
...