Uncaught Argument Count error при настройке MongoDB в Codeception для PHP 7.2 - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь настроить MongoDB в качестве источника базы данных в PHP 7.2 для Codeception. Я установил конфиг в codeception.yml:

modules:
    config:
        MongoDb:
            dsn: 'mongodb://##.##.##.##:27017/test_data'
            user: 'root'
            password: '###'
            dump_type: MongoDb::DUMP_TYPE_JS
            dump: 'tests/_data/name.json'
            populate: true
            cleanup: false
            enabled:
                - Codeception\Lib\Driver\MongoDb

Но когда я запускаю свои тесты, я получаю эту ошибку:

PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function Codeception\Lib\Driver\MongoDb::__construct(), 2 passed and exactly 3 expected in /FOLDER/vendor/codeception/codeception/src/Codeception/Lib/Driver/MongoDb.php:97
Stack trace:
#0 [internal function]: Codeception\Lib\Driver\MongoDb->__construct(Object(Codeception\Lib\ModuleContainer), Array)
#1 /FOLDER/vendor/codeception/codeception/src/Codeception/Lib/Di.php(84): ReflectionClass->newInstanceArgs(Array)
#2 /FOLDER/vendor/codeception/codeception/src/Codeception/Lib/ModuleContainer.php(92): Codeception\Lib\Di->instantiate('Codeception\\Lib...', Array, false)
#3 /FOLDER/vendor/codeception/codeception/src/Codeception/SuiteManager.php(67): Codeception\Lib\ModuleContainer->create('Codeception\\Lib...')
#4 /FOLDER/vendor/codeception/codeception/src/Codeception/Codecept.php(186): Codeception\SuiteManager->__construct(Object(Sym in /FOLDER/vendor/codeception/codeception/src/Codeception/Lib/Driver/MongoDb.php on line 97

Чтобы избавиться от ошибки аргумента, я временно изменил определение функции следующим образом:

public function __construct($dsn, $user, $password = '') { ... }

По какой-то причине оно передается числом 1 обоим $dsn и $user. Используя print_r, я вижу, что существует объект Codeception\Lib\ModuleContainer и что у него есть запись ['config']['MongoDb'] с правильной конфигурацией. Но эта информация не загружается.

Для справки: в моем файле codeception.yml я попытался следовать начальным указаниям, которые они дают, и попытался не указывать здесь параметр конфигурации enabled. Я также добавил database: admin в конфигурацию MongoDb. Единственный раз, когда я даже попал в часть с ошибкой, был установлен enabled. В противном случае я просто получаю ошибку авторизации для Mongo.

1 Ответ

0 голосов
/ 01 мая 2018

Ваша проблема в том, что вы включили не модуль MongoDb, а драйвер MongoDb, который не является модулем.

Правильная конфигурация:

modules:
    config:
        MongoDb:
            dsn: 'mongodb://##.##.##.##:27017/test_data'
            user: 'root'
            password: '###'
            dump_type: MongoDb::DUMP_TYPE_JS
            dump: 'tests/_data/name.json'
            populate: true
            cleanup: false
    enabled:
        - MongoDb
...