mysql — база данных PHP, использующая инфраструктуру MVC, получает сообщение об ошибке после запуска тестирования PHPUnit

При запуске 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;
}
}
?>

Это контроллер:

<?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");
}
}
?>

0

Решение

Я подозреваю, что это вызвано тем, что вы используете. Сама константа предопределенный PHP-MySQLi-драйвером. Вы можете проверить руководство фреймворка, если они рекомендуют установить конфигурацию для драйвера базы данных, чтобы это предупреждение исчезло. Другой способ — установить тайм-аут, который вы считаете разумным в настройках теста:

<?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 ...
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector