我有以下功能:
Scenario: Product page
Given there are the following products:
| id | name | price |
| 1 | Test product | 100 |
When I am on "/product/view/1"
Then the main page title should be "Test product"
现在,我正在使用Symfony和Doctrine。所以在我的上下文课中我不能这样做:
/**
* @Given /^there are the following products:$/
*/
public function createProducts(TableNode $products)
{
$hash = $users->getHash();
foreach ($hash as $row) {
// Create our user and set details
$product = new Product();
$product->setId($row['id']); // <= This method doesn't exist
$product->setName($row['name']);
$product->setPrice($row['price']);
// Persist product...
}
}
setId方法不存在,创建它并不是一个好主意。所以我的问题是,有没有办法测试这个?
答案 0 :(得分:0)
你应该使用另一种方法:
Scenario: Product page
Given there are the following products:
| name | price |
| Test product | 100 |
When I am on the "Test product" page
Then the main page title should be "Test product"
步骤I am on the "Test product" page
应该是这样的:
$product = $this->getService('your_product_repo')->findOneBy(array('name' => $productName));
$url = $this->getService('router')->generate('your_product_page_route', array('id' => $product->getId()));
$this->getSession()->visit($url);
这可能不是开箱即用的,但它会给你一个想法。
这样,如果您更改了产品路线,则此方案不会受到影响。
答案 1 :(得分:0)
使用DataFixtures执行此类任务。
您可以轻松创建测试数据并按顺序填充测试数据库