Платформа PHPUnit сохраняет возвращаемый класс не найденным - PullRequest
0 голосов
/ 17 января 2020

Платформа PHPUnit продолжает возвращать это сообщение

tests \ IWPNoncesTest :: testCreateNonce Ошибка: класс 'tests \ IWPNonces' не найден

C: \ Users \ user pc \ Desktop \ inpsyde \ tests \ IWPNoncesTest. php: 25

Для начала, я новичок в модульном тестировании, и я действительно не знаю, как это работает. Я попытался следовать официальному руководству на первой странице веб-сайта [https://phpunit.de/getting-started/phpunit-8.html] [1] , но это тоже не работает, так как он также жалуется, что электронная почта

класс не выходит или около того.

Мой вопрос: как мне работать с платформой PHPUnit? И лично, это шаги, которые я уже сделал 1. Создайте

phpunit. xml

файл в каталоге root, и это код там

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
    backupStaticAttributes="false"
    colors="true"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    processIsolation="false"
    stopOnFailure="false"
    syntaxCheck="false"
    bootstrap="vendor/autoload.php"
>
    <testsuites>
        <testsuite name="WPNonces Test Suite">
            <directory>./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist>
            <directory>./classes</directory>
        </whitelist>
    </filter>
</phpunit>
Затем создайте папку классов, в которой находится основной код, и в папке классов: I

createIWPNonces. php

, и это код там

<?php

declare(strict_types=1);

namespace IWPNoncesFunctions;

class IWPNonces{

    public function IWPCreateNonce(string $action): string {
        return wp_create_nonce($action);
    }

    public function IWPNonceURL(string $url, string $action): string {
        return wp_nonce_url($url, $action);
    }



    public function IWPNonceField(string $action, string $field): string {
        return wp_nonce_field($action, $field);
    }

    public function IWPVerifyNonce(string $action, string $field, string $type): string{
        switch($type){
            if('field' == $type){
                if(!isset($_REQUEST['field']) || !wp_verify_nonce(['field'], 'action')){
                    return false;
                }else{
                    return wp_verify_nonce(['field'], 'action');
                }
            }
            break;

            if('url' == $type){
                if ( ! empty( $_REQUEST ) && check_admin_referer( 'action', 'field' ) ){
                    return check_admin_referer( 'action', 'field' );
                }
            }
            break;

            if('ajax' == $type){
                return check_ajax_referer('$action', $security);
            }
            break;
            default:
                return 'Error, the type name does not exist in wp nonce verifier. Please, use a valid verifier';
            break;
        }
    }

    public function IWPVerifyURLNonce(string $url, string $action): string {
        if ( ! empty( $_REQUEST ) && check_admin_referer( 'action', 'field' ) ){
            return check_admin_referer( 'action', 'field' );
        }
    }

    public function IWPVerifyFieldNonce(string $action, string $field): string {
        if(!isset($_REQUEST['field']) || !wp_verify_nonce(['field'], 'action')){
            return false;
        }else{
            return wp_verify_nonce(['field'], 'action');
        }
    }

    public function IWPVerifyAjaxNonce(string $url, string $action): string {
        if('ajax' == $type){
            return check_ajax_referer('$action', $security);
        }
    }
}
После этого я создал папку

tests / IWPNoncesTest

, в которой находится сценарий, который будет проверять PHPUnit, и этот сценарий написан для тест

<?php
declare(strict_types=1);


// Created by : Gbenga Ogunbule
// Location : Ijebu Ode
// Date : 18/07/19
// Time : 21:44

namespace tests;

use IWPNoncesFunctions;
use PHPUnit\Framework\TestCase;;

class IWPNoncesTest extends TestCase{
    /*private $createNonce;
    public function setUp() {
        $this->createNonce = new IWPNonces('action');
        #$this->createNonce = IWPCreateNonce('action');
    }*/


    public function testCreateNonce(){
        $createNonce = new IWPNonces();
        $createNonce->IWPCreateNonce('action');

        $this->assertSame(
            'action',
            $this->createNonce,
            'The verify Nonce(WPNonce) is different from the one created above'
        );
    }

    /*public function testVerifyURLNonce(){
        $verifyURLNonce = new IWPNonces();
        $verifyURLNonce->IWPVerifyURLNonce('localhost/index.php', 'action');

        $this->assertSame('action', $verifyURLNonce, 'Verified not');
    }

    public function  testVerifyFieldNonce(){
        $verifyFieldNonce = new IWPNonces();
        $verifyFieldNonce->IWPVerifyFieldNonce('action', 'action');

        $this->assertSame('action', $verifyFieldNonce, 'Failed');       
    }

    public function testVerifyAjaxNonce(){
        $verifyAjaxNonce = new IWPNonces();
        $verifyAjaxNonce->IWPVerifyFieldNonce('localhost/index.php', 'action'); 

        $this->assertSame('action', $verifyAjaxNonce, 'Failure');   
    }*/
}
Внутри

composer. json

У меня есть этот

"autoload": {
        "psr-4": {
            "WPNoncesFunction\\": "classes",
            "tests\\": "tests"
        }
    },

1 Ответ

1 голос
/ 17 января 2020

добро пожаловать в SO!

Измените объявление об использовании в своем тесте:

use IWPNoncesFunctions;

на

use IWPNoncesFunctions\IWPNonces;

Обязательно поймите разницу между относительными и абсолютными путями https://www.php.net/manual/language.namespaces.basics.php

...