Отказ от автоматической загрузки дополнительных классов в тестовый контекст

Behat версии 3.0.12, PHP 5.3.3

Я опишу проблему, прежде чем покажу свою настройку: я создаю небольшой тестовый проект Behat, но когда я пытаюсь создать дополнительные классы в других файлах, чтобы вставить их в мой файл контекста, Behat не загружает их автоматически. В документах говорится, что все в features/bootstrap должно автоматически загружаться и быть доступным. Конкретная ошибка такова:

Fatal error: Class 'TestObject' not found in /data/drupal7/sites/behat-test/projects/test-project/features/bootstrap/TestContext.php on line 23

В документах версии 3 учебник определяет класс в новом PHP файл и приносит его без особых усилий. Попытка сделать то же самое в моей версии не работает.

У меня есть настройка Behat следующим образом:

composer.*
projects
vendor

Это стандартный результат установки Behat, за исключением новой папки, в которой у моих отдельных проектов есть собственная папка в project/<project name>. Например, project/test_project:

behat.yml
features
    |-- test.feature
    |-- bootstrap
           |-- TestContext.php
           |-- Test.php

Мой конфигурационный файл behat.yml выглядит так:

default:
    suites:
        default:
            paths:     [ %paths.base%/features ]
            bootstrap: [ $paths.features%/bootstrap ]
            contexts:  [ TestContext ]

TestContext.php выглядит так:

<?php

use Behat\Behat\Tester\Exception\PendingException;
use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;

/**
 * Behat context class.
 */
class TestContext implements Context
{
    private $test;

    public function __construct()
    {
        $this->test = new TestObject();
    }

    /**
     * @Given I go to the Google homepage
     */
    public function iGoToTheGoogleHomepage()
    {
        throw new PendingException();
    }
}

И, наконец, Test.php

<?php

final class TestObject {
    private $price = 0;

    public function setPrice($amount) {
        $this->price = $amount;
    }

    public function getPrice() {
        return $this->price;
    }
}

Любые идеи?


person njp    schedule 06.08.2014    source источник


Ответы (1)


Оказывается, дополнительные файлы должны соответствовать стандарту PSR-0, и в этом случае класс TestObject должен находиться в файле с тем же именем, например. TestObject.php

person njp    schedule 06.08.2014
comment
URL устарел. - person kwoxer; 02.01.2018