在PHP 7.2的Codeception中设置MongoDB时出现Uncaught Argument Count错误

时间:2018-04-30 19:09:00

标签: php mongodb codeception

我正在尝试将MongoDB设置为PHP 7.2 for 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配置选项。我还在MongoDb配置中添加了database: admin。我到达错误部分的唯一一次是enabled设置。否则我只是获得了Mongo的授权失败错误。

1 个答案:

答案 0 :(得分:0)

你的问题是你启用的不是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