如何解决Codeception 验收测试尝试检查数据库中的填充数据
我正在尝试创建一些验收测试,这些测试在每次测试后使用重新填充转储,如此处 https://codeception.com/docs/09-Data 和此处 https://codeception.com/docs/modules/Db 所述。
不知何故,我似乎没有理解清理/填充概念。
我尝试用一个简单的表和几行填充数据库,并在一个简单的测试中检查这些行是否存在,但即使报告显示数据库已填充,看起来也不存在数据。
composer.json
{
"name": "tests","description": "654321","license": "GPL-2.0-or-later","require-dev": {
"codeception/codeception": "~4.0","codeception/module-asserts": "^1.0","codeception/module-webdriver": "^1.0","codeception/module-PHPbrowser": "^1.0","codeception/module-filesystem": "^1.0","codeception/module-db": "^1.0"
}
}
Codecepion 数据库模块
modules:
enabled: [Db]
config:
Db:
dsn: "MysqL:host=%HOST%;dbname=%dbnAME%;charset=utf8"
user: "root"
password: "root"
dump: "tests/codeception/_data/dump.sql"
populate: true
cleanup: true
populator: "MysqL -u$user -p$password $dbname < $dump"
dump.sql
SET sql_mode = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
DROP TABLE IF EXISTS `my_table`;
CREATE TABLE `my_table` (
`id` int(11) NOT NULL,`name` varchar(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `my_table` (`id`,`name`) VALUES
(1,'CA_A'),(2,'CA_B'),(3,'CA_C');
验收测试
public function exampleTest(\AcceptanceTester $I)
{
$item = $I->grabFromDatabase('my_table','name',['id' => 1]);
var_dump($item);
$I->seeInDatabase('my_table',array('id' => 2,'name' => 'CA_B'));
}
报告
Run PHP vendor/bin/codecept run "tests/codeception/acceptance/mytest.PHP:exampleTest" -vvv --html --fail-fast
Codeception PHP Testing Framework v4.1.21
Powered by PHPUnit 8.5.17 by Sebastian Bergmann and contributors.
[Connecting To Db] {"config":{"populate":true,"cleanup":true,"reconnect":false,"waitlock":0,"dump":"tests/codeception/_data/dump.sql","populator":"MysqL -u$user -p$password $dbname < $dump","dsn":"MysqL:host=127.0.0.1;dbname=test;charset=utf8","user":"root","password":"root"},"options":[]}
[Db] Connected to default test
Rebuilding AcceptanceTester...
[Db] Executing Populator: `MysqL -uroot -proot test < tests/codeception/_data/dump.sql`
[Db] Populator Finished.
Acceptance Tests (1) ---------------------------------------
Modules: Asserts,\Helper\Acceptance,DbHelper,Filesystem,MailCatcher,Db
------------------------------------------------------------
Printing HTML report into report.html
mytest: example Test
Signature: mytest.PHP:exampleTest
Test: tests/codeception/acceptance/mytest.PHP:exampleTest
Scenario --
[Db] Executing Populator: `MysqL -uroot -proot test < tests/codeception/_data/dump.sql`
[Db] Populator Finished.
I grab from database "my_table","name",{"id":1}
[Query] SELECT name FROM `my_table` WHERE `id` = ?
[Parameters] [1]
bool(false)
I see in database "my_table",{"id":2,"name":"C...}
[Query] SELECT count(*) FROM `my_table` WHERE `id` = ? AND `name` = ?
[Parameters] [2,"CA_B"]
Screenshot and page source were saved into '/home/runner/work/something/tests/codeception/_output/' dir
FAIL
------------------------------------------------------------
Time: 1.08 seconds,Memory: 14.00 MB
There was 1 failure:
---------
1) mytest: example Test
Test tests/codeception/acceptance/install/mytest.PHP:exampleTest
Step See in database "my_table","name":"CA_B"}
Fail No matching records found for criteria {"id":2,"name":"CA_B"} in table my_table
Failed asserting that 0 is greater than 0.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。