我正在尝试将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的授权失败错误。
答案 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