如何使用Symfony中的Behat和tablenode创建带有id的doctrine记录

时间:2015-09-22 11:21:06

标签: symfony doctrine-orm behat

我有以下功能:

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方法不存在,创建它并不是一个好主意。所以我的问题是,有没有办法测试这个?

2 个答案:

答案 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执行此类任务。

您可以轻松创建测试数据并按顺序填充测试数据库