web-dev-qa-db-fra.com

Tests unitaires dans le backend WordPress (is_admin () est true)

J'ai demandé ceci sur IRC, Twitter, Slack - je suis tout à fait étonné de la difficulté à localiser la réponse à cette question:

J'ai un tas de code de plugin qui ne fonctionne que lorsque is_admin() renvoie true, c'est-à-dire lorsque l'utilisateur regarde le panneau d'administration.

Comment organiser un test unitaire tel qu'il se trouve dans le contexte d'administration lors de l'exécution des assertions?

6
aendrew

Selon ce test , vous utilisez set_current_screen() pour naviguer vers un de ceux-ci dans la méthode setUp.

Hélas, rien de tout cela n'apparaît si vous regardez la page de référence extrêmement utile pour get_current_screen () ...

Exemple:

<?php
class AxisSetupTest extends WP_UnitTestCase {    
    /**
     * @covers AxisWP::__construct
     */
    function test_constructor() {
        // Assert

        // Admin
        $this->assertInternalType('integer', has_action( 'admin_enqueue_scripts', array( 'AxisWP', 'add_admin_stylesheet' ) ) );
    }


    public function setUp() {
            parent::setUp();

            $user_id = $this->factory->user->create( array( 'role' => 'administrator' ) );
            $user = wp_set_current_user( $user_id );

            // This is the key here.
            set_current_screen( 'edit-post' );
    }

    public function tearDown() {
            parent::tearDown();
    }
}
10
aendrew