Я использую фикстуры в 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. Большое спасибо за любой ответ.