Kann Codeception nicht dazu bringen, mit wp_query auf Multisite zu arbeiten

Lesezeit: 4 Minuten

Benutzer-Avatar
Stan Wielga

Ich versuche, einen Test einzurichten, um die Anzahl eines benutzerdefinierten Beitrags in der Datenbank als ersten Schritt zu einem robusteren Test zu zählen, aber er funktioniert nicht richtig. Hier ist eine Kopie des Tests:

<?php
// codecept run wpunit RWA:CourseModelsTest

namespace RWA;

require_once get_template_directory() . '/models/course.php';

class CourseModelsTest extends \Codeception\TestCase\WPTestCase {
    /**
     * @var \WpunitTester
     */
    protected $tester;

    protected function _before() {

    }

    protected function _after() {
    }

    // tests
    public function testSomeFeature() {

        $query = \Course::count();
        $this->assertEquals( 53, $query );
    }
}

In meinem Modell sieht die Funktion so aus

public static function count() {
    $args = array(
        'posts_per_page' => -1,
        'offset' => 0,
        'post_type' => 'courses',
        'suppress_filters' => true,
    );
    $query = new \WP_Query( $args );
    return count( $query->posts );
}

Aber wenn es zur Behauptung kommt, heißt es, dass 53 nicht gleich 0 ist.

Lokal betreibe ich eine Multisite-WordPress-Instanz, aber ich bin mir nicht sicher, ob sich dies auf das Setup auswirkt oder ob dies etwas Zusätzliches ist, das ich in der Codeception konfigurieren muss. Hat jemand Ideen?

Update: Hier ist eine Kopie einiger aktueller Konfigurationsdateien, die ich habe:

paths:
tests: tests
output: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
actor_suffix: Tester
modules:
config:
    WPDb:
        dsn: 'mysql:host=%DB_HOST%;dbname=%DB_NAME%'
        user: '%DB_USER%'
        password: '%DB_PASSWORD%'
        dump: 'tests/_data/dump.sql'
        populate: true #import the dump before the tests
        cleanup: false #import the dump between tests
        url: '%WP_URL%'
        urlReplacement: true #replace the hardcoded dump URL with the one above
        tablePrefix: '%TABLE_PREFIX%'
        waitlock: 0
    WPBrowser:
        url: '%WP_URL%'
        adminUsername: '%ADMIN_USERNAME%'
        adminPassword: '%ADMIN_PASSWORD%'
        adminPath: '%WP_ADMIN_PATH%'
    WPFilesystem:
        wpRootFolder: '%WP_ROOT_FOLDER%'
        plugins: '/wp-content/plugins'
        mu-plugins: '/wp-content/mu-plugins'
        themes: '/wp-content/themes'
        uploads: '/wp-content/uploads'
    WPLoader:
        wpRootFolder: "%WP_ROOT_FOLDER%"
        dbName: "%TEST_DB_NAME%"
        dbHost: "%TEST_DB_HOST%"
        dbUser: "%TEST_DB_USER%"
        dbPassword: "%TEST_DB_PASSWORD%"
        tablePrefix: "%TEST_TABLE_PREFIX%"
        domain: "%WP_DOMAIN%"
        adminEmail: "%ADMIN_EMAIL%"
        title: "Test"
        theme: retirement-wealth-academy
        plugins: ['']
        activatePlugins: ['']
    WPWebDriver:
        url: '%WP_URL%'
        adminUsername: '%ADMIN_USERNAME%'
        adminPassword: '%ADMIN_PASSWORD%'
        adminPath: '%WP_ADMIN_PATH%'
        capabilities:
            browserName: "chrome"
            javascriptEnabled: true
            webStorageEnabled: true
            nativeEvents: true
extensions:
enabled:
    - Codeception\Extension\RunFailed
commands:
    - Codeception\Command\GenerateWPUnit
    - Codeception\Command\GenerateWPRestApi
    - Codeception\Command\GenerateWPRestController
    - Codeception\Command\GenerateWPRestPostTypeController
    - Codeception\Command\GenerateWPAjax
    - Codeception\Command\GenerateWPCanonical
    - Codeception\Command\GenerateWPXMLRPC
    - Codeception\Command\DbSnapshot
    - tad\Codeception\Command\SearchReplace
params:
- .env

Und für meine spezielle Suite

actor: WpunitTester
modules:
    enabled:
        - WPLoader
        - \Helper\Wpunit
        - WPDb

Ich ziele nicht auf die richtige Datenbank ab, und ich weiß nicht, was ich falsch mache. Ich habe eine useBlog-Methode in den Moduldateien von wploader und eine Multisite-Option gefunden, aber ich habe Probleme, sie dazu zu bringen, das zu tun, was ich will – wp_query auf Blog 2 über eine Klasse (die Klasse im Testing) verwenden.

  • Es ist eine Weile her für mich, aber ich denke, Sie sollten zurückkehren post_ zählen return $query->post_count; aus Ihrer count()-Funktion

    – Jamie_D

    18. Oktober 2018 um 21:49 Uhr

  • Guter Vorschlag, fertig =)

    – Stan Wielga

    19. Oktober 2018 um 4:20 Uhr

Nachdem ich viele Dokumentationen und Github-Probleme durchgesehen habe, habe ich das Problem gelöst! Der von mir verwendete DB-Dump war ziemlich groß, und ich bemerkte nach dem Ausführen des Tests, dass meinen Posts und Postmeta-Tabellen alle Daten fehlten (was eine 0-Rückgabe von der Abfrage erklärt). Die Verwendung des Populators zum Behandeln des SQL-Ladens im WPDb-Modul hat eine Menge davon geklärt. Wenn Ihr SQL-Dump groß ist (meiner ist etwa 26 MB groß), sollten Sie den Populator verwenden.

  WPDb:
    dsn: 'mysql:host=127.0.0.1;dbname=ffwpcore_test'
    user: '%DB_USER%'
    password: '%DB_PASSWORD%'
    dump: 'tests/_data/dump.sql'
    populate: true #import the dump before the tests
    cleanup: false #import the dump between tests
    url: '%WP_URL%'
    urlReplacement: true #replace the hardcoded dump URL with the one above
    tablePrefix: '%TABLE_PREFIX%'
    waitlock: 0
    populator: '/Applications/MAMP/Library/bin/mysql  --host=localhost -uroot -proot $dbname < $dump'

Ich habe jetzt eine Rückmeldung von der wp_query bekommen und kann nun meine Tests weiterentwickeln.

1344050cookie-checkKann Codeception nicht dazu bringen, mit wp_query auf Multisite zu arbeiten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy