从BDD开始(使用Behat和Symfony2作为背景)

从BDD开始(使用Behat和Symfony2作为背景),symfony,cucumber,bdd,Symfony,Cucumber,Bdd,我只是从BDD和Behat开始,但我缺少了一个更复杂的示例,产品类别示例太简单(但是 当你想超越时,首先当然是必要的 我使用的模型没有唯一的字段,因此 这样做: 就我而言,我有一个1:1的关系: Room hotel_id ... Default configuration room_id name //"single room", "double room"... price ... 所以,当我想创建场景“场景:房间有一个默认值 配置“我想这样开始: I ha

我只是从BDD和Behat开始,但我缺少了一个更复杂的示例,产品类别示例太简单(但是 当你想超越时,首先当然是必要的

我使用的模型没有唯一的字段,因此 这样做:

就我而言,我有一个1:1的关系:

Room
  hotel_id
  ...

Default configuration
  room_id
  name    //"single room", "double room"...
  price
  ...
所以,当我想创建场景“场景:房间有一个默认值 配置“我想这样开始:

I have a room XXX
但我不能,因为我没有像“name”或其他任何字段 这是独一无二的,所以我只写:

I have a room
当我想要检索房间以添加默认值时,问题就出现了 在示例产品类别($Product=$this->getRepository('AcmeDemoBundle:Product')->findOneByName($productName);)中的配置类似,我不知道该怎么做..,如何检索用于添加默认配置的文件室对象?或者如何检索默认配置对象

你知道我该怎么做吗

编辑:

在everzet的回复之后,我想添加我感兴趣的场景:

When I add a default configuration to a room
Then I should find a room has a default configuration
也许这个场景听起来很奇怪,但正如我上面所说的,无论是在房间中还是在默认配置中,我都没有唯一的字段


那么,my.feature文件中的函数应该是什么呢?

所有场景步骤定义都在单个上下文类实例中运行,每个场景都有自己的上下文实例。这意味着,您可以在一个步骤定义中对当前上下文设置IVAR,并在下一个步骤定义中读取其值。甚至在Behat文档中也有描述;-)

在您的例子中,您的
I have a room
步骤可以将最后一个持久化的记录id保存到上下文ivar中,下一步可以使用它的值在数据库中查找特定的(最后添加的)room。就像这样:

// 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);
// …

所有场景步骤定义都在单个上下文类实例中运行,每个场景都有自己的上下文实例。这意味着,您可以在一个步骤定义中对当前上下文设置IVAR,并在下一个步骤定义中读取其值。甚至在Behat文档中也有描述;-)

在您的例子中,您的
I have a room
步骤可以将最后一个持久化的记录id保存到上下文ivar中,下一步可以使用它的值在数据库中查找特定的(最后添加的)room。就像这样:

// 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);
// …

嗨,埃弗泽特,我在问题中写下了我的情景。希望我已经回答了你的问题;-)嗨,埃弗泽特,我在问题中写下了我的情景。希望我已经回答了你的问题;-)