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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...