gpt4 book ai didi

使用 MVC 框架的 PHP 数据库在运行 PHPUnit 测试后收到错误消息

转载 作者:行者123 更新时间:2023-11-29 10:50:33 26 4
gpt4 key购买 nike

当运行 PHPUnit 时,它给了我这个错误,在所有 5 个测试中,任何帮助将不胜感激。这是我第一次用 PHP 构建任何东西,我知道我还有很长的路要走。

Use of undefined constant MYSQLI_OPT_CONNECT_TIMEOUT - assumed 'MYSQLI_OPT_CONNECT_TIMEOUT' in all 5 tests.

At locations:
mysql_connector.php:70 menu_controller.php:60
mysql_connector.php:74 menu_controller.php:60
mysql_connector.php:55 menu_controller.php:46
mysql_connector.php:94 menu_controller.php:75
mysql_connector.php:111 menu_controller.php:86

这是 MySql 连接器:

<?php
/**
* Class for creating, reading, and modifying the database.
*/
class Sql {
/**
* @var SELECT_ALL selects from database table.
*/
const SELECT_ALL = 'SELECT * FROM';

/**
* Database constructor.
* @param $user
* @param $pass
* @param $dbName
* return void
*/
function __construct( $user, $pass, $dbName ) {
require_once 'meekrodb.2.3.class.php';

$this->user = $user;
$this->pass = $pass;
$this->dbName = $dbName;
}

/**
* Seaches database for user by id.
* @param $databaseName
* @param $field
* @param $value
* @return string
*/
public function readByID( $databaseName, $field, $value ) {

\DB::$user = $this->user;
\DB::$password = $this->pass;
\DB::$dbName = $this->dbName;

$results = \DB::query( self::SELECT_ALL . $databaseName . 'WHERE' . $field . '=' . $value );

return $results;
}

/**
* Displays all users within the database.
* @param $databaseName
* @return string
*/
public function readDb( $databaseName ) {
\DB::$user = $this->user;
\DB::$password = $this->pass;
\DB::$dbName = $this->dbName;

$results = \DB::query( self::SELECT_ALL . $databaseName );

return $results;
}

/**
* Creates a new user in the database.
* @param $databaseName
* @param $firstName
* @param $lastName
* @param $email
* @param $password
* @return string
*/
public function create( $databaseName, $firstName, $lastName, $email, $password ) {
\DB::$user = $this->user;
\DB::$password = $this->pass;
\DB::$dbName = $this->dbName;

$results = \DB::query( 'INSERT INTO' . $databaseName . "( firstName, lastName, email, password ) VALUES ('" . $firstName . "', '" . $lastName . "', '" . $email . "', '" . $password . "' );" );

return \DB::insertId();
}

/**
* Updates a user within the database.
* @param $databaseName
* @param %id
* @param $firstName
* @param $lastName
* @param $email
* @param $password
* @return string
*/
public function update( $databaseName, $id, $firstName, $lastName, $email, $password ) {
\DB::$user = $this->user;
\DB::$password = $this->pass;
\DB::$dbName = $this->dbName;

$results = \DB::query('UPDATE' . $databaseName . "' SET firstName = '" . $firstName . "', lastName = '" . $lastName . "', email = '" . $email . "', password = '" . $password . "' WHERE Users.id = '" . $id . "';'");

return $results;
}

/**
* Deletes a user from the database.
* @param $databaseName
* @param $field
* @param $value
* @return string
*/
public function delete( $databaseName, $field, $value ) {
\DB::$user = $this->user;
\DB::$password = $this->pass;
\DB::$dbName = $this->dbName;

$results = \DB::query('DELETE FROM' . $databaseName . 'WHERE' . $field . '=' . $value);

return $results;
}
}
?>

这是 Controller :

<?php
require_once dirname(__FILE__) . '/../models/user.php';
require_once dirname(__FILE__) . '/../mysql_connector.php';

/**
* Controller for functionality of menu
**/
class MenuController {
/**
* @var $db = database
**/

private $db;

/**
* @var TABLE = user table name.
**/
const TABLE = 'users';

/**
* Constructs database connector
* @param none
* return void
**/
public function __construct() {
$this->db = new Sql('my_database', 'password', 'my_database');
}

/**
* displays the user by id.
* @param array $args
* @return array
*/
public function displayUserById(array $args = array()) {
$id = $args[0];

return json_encode($this->db->readByID( self::TABLE, 'id', $id));
}

/**
* displays the database.
* @param none
* @return void
*/
public function view() {
return json_encode( $this->db->readDb( self::TABLE ));
}

/**
* Creates a new user.
* @param array $args
* @return array
*/
public function create(array $args = array()) {
$firstName = $args[0];
$lastName = $args[1];
$email = $args[2];
$password = $args[3];

return $this->db->create( self::TABLE, $firstName, $lastName, $email, $password);
}

/**
* Updates users within the database.
* @param array $args
* @return array
*/
public function update(array $args = array()) {
$id = $args[0];
$firstName = $args[1];
$lastName = $args[2];
$email = $args[3];
$password = $args[4];

return json_encode( $this->db->update( self::TABLE, $id, $firstName, $lastName, $email, $password));
}

/**
* Deletes a user within the database.
* @param array $args
* @return array
*/
public function delete(array $args = array()) {
$id = $args[0];

return json_encode($this->db->delete( self::TABLE, 'id', $id));
}
}
?>

我的测试文件夹:

<?php
require_once dirname(__FILE__) . '/../controllers/menu_controller.php';

use PHPUnit\Framework\TestCase;

/**
* Extends PHPUnit giving access to the program, which allows for testing.
*/
class DatabaseTest extends TestCase {
/**
* Test to display if user was created.
* @param none
* @return true if user was created.
* @test
*/
public function testUserCreated() {
$control = new MenuController();

$results = json_decode( $control->create(['Jane', 'Doe', 'janedoe@gmail.com', 'password']));

$this->assertTrue( $results > 0 );
}
/**
* Test to display single user by id.
* @param none
* @return true if id was found.
* @test
*/
public function testShowUser() {
$control = new MenuController();

$newId = $control->create(['Jane', 'Doe', 'janedoe@gmail.com', 'password']);

$results = json_decode( $control->displayUserById([$newId]))[0];

$this->assertEquals($results->firstName, 'Jane');
}
/**
* Test to display all user in the database.
* @param none
* @return true if users are displayed.
* @test
*/
public function testShowAllUsers() {
$control = new MenuController();

$results = $control->view();

$items = json_decode( $results );

$this->assertTrue(sizeof( $items ) > 1 );
}
/**
* Test to update data of a user within the database.
* @param none
* @return true if user is updated.
* @test
*/
public function testUserUpdated() {
$control = new MenuController();

$results = json_decode($control->update([0, 'Jane', 'Doe', 'janedoe@gmail.com', 'password' ]));

$this->assertTrue($results, "true");
}
/**
* Test if user was deleted from the database.
* @param none
* @return true if user was deleted.
* @test
*/
public function testUserDeleted() {
$control = new MenuController();

$results = json_decode($control->delete([0]));

$this->assertTrue($results, "true");
}
}
?>

最佳答案

我怀疑这是由您使用的框架引起的。常数本身是 predefined by PHP's MySQLi-driver 。您可以查看框架的手册,如果他们建议设置数据库驱动程序的配置以使该警告消失。另一种方法是在测试设置中设置您认为合理的超时:

<?php
require_once dirname(__FILE__) . '/../controllers/menu_controller.php';

use PHPUnit\Framework\TestCase;

/**
* Extends PHPUnit giving access to the program, which allows for testing.
*/
class DatabaseTest extends TestCase {

public function setUp() {
parent::setUp();
if (!defined('MYSQLI_OPT_CONNECT_TIMEOUT')) {
define('MYSQLI_OPT_CONNECT_TIMEOUT', 3);
}
}

// ... your tests ...

关于使用 MVC 框架的 PHP 数据库在运行 PHPUnit 测试后收到错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43814746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com