Behat, используя фикстуры с getDependencies - PullRequest
0 голосов
/ 05 мая 2020

Я использую фикстуры в behat, но у меня возникла проблема с внедрением зависимостей в методе getDependencies (). Когда я использую его с классом, который использует DI для получения услуг, я получаю следующую ошибку:

  Type error: Too few arguments to function App\DataFixtures\UserFixtures::__construct(), 0 passed in vendor/doctrine/data-fixtures/lib/Doctrine/Common/DataFixtures/Loader.php on line 231 and exactly 2 expected (Behat\Testwork\Call\Exception\FatalThrowableError)

Когда я запускаю приборы по команде, все работает нормально. Код приборов и контекст, приведенный ниже:

Прибор 1

class FooFixtures extends BaseFixture implements DependentFixtureInterface
{
    public function getDependencies()
    {
        //When I do that if, behat works ok, but if it's possible I don't want that if here
        if ($_ENV['APP_ENV'] !== 'test') {
            return [
                UserFixtures::class,
                Foo2Fixtures::class,
                Foo3Fixtures::class,
                Foo4Fixtures::class,
            ];
        } else {
            return [
                //UserFixtures::class,
                Foo2Fixtures::class,
                Foo3Fixtures::class,
                Foo4Fixtures::class,
            ];
        }
    }

UserFixtures

class UserFixtures extends BaseFixture
{

    private $passwordEncoder;
    private $userImageManager;

    //That contructor makes problem
    public function __construct(UserPasswordEncoderInterface $passwordEncoder, ImagesManagerInterface $userImageManager)
    {
        $this->passwordEncoder = $passwordEncoder;
        $this->userImageManager = $userImageManager;
    }

И код, который загружает приборы

    private function loadFixtures($fixturesNames)
    {
        //use Doctrine\Common\DataFixtures\Loader;
        //I tried $loader = new ContainerAwareLoader($this->kernel->getContainer()); too but with the same result :(

        $loader = new Loader();

        foreach ($fixturesNames as $fixtureName) {
            $fixture = $this->kernel->getContainer()->get('App\DataFixtures\\'.$fixtureName.'Fixtures');
            $loader->addFixture($fixture);
        }

        $executor = new ORMExecutor($this->getEntityManager());
        $executor->execute($loader->getFixtures(), true);
    }

Кто-то знает, как заставить его работать без этого уродливого if ?? В тестовом env я могу обрабатывать зависимости между приборами, но в dev env мне нужно использовать DependentFixtureInterface. Большое спасибо за любой ответ.

...