Make WordPress Core


Ignore:
Timestamp:
02/26/2021 02:07:53 PM (3 years ago)
Author:
johnbillion
Message:

Build/Test Tools: Switch back to running the PHPUnit test suite against the src directory instead of build.

Some PHPUnit tests were concerned with the state of files in the build directory. In order to allow the tests to run without requiring a build to be run first, these have been moved into assertions that run after the build step (and therefore cause it to fail if they do not pass), or into QUnit tests as necessary.

Various other PHPUnit tests implictly depend on built JavaScript files being present. These files are now touched during the test setup to avoid PHP warnings if the build files are not present.

The wp-tests-config-sample.php file and the GitHub Actions configuration have also been changed so ABSPATH uses src instead of build, therefore allowing the PHPUnit tests to be run without a build having to be run first. This means all new local installations of WordPress will use src for PHPUnit testing. If you would like to switch your existing installation over then change the location of ABSPATH in wp-tests-config.php to point to src instead of build.

Props peterwilsoncc, iandunn, gziolo, desroj, johnbillion

Fixes #51734
See #45863

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/oembed/template.php

    r48937 r50441  
    2323
    2424        $this->assertQueryTrue( 'is_single', 'is_singular', 'is_embed' );
     25
     26        // `print_embed_scripts()` assumes `wp-includes/js/wp-embed-template.js` is present:
     27        self::touch( ABSPATH . WPINC . '/js/wp-embed-template.js' );
    2528
    2629        ob_start();
     
    291294
    292295    /**
     296     * Confirms that no ampersands exist in src/wp-includes/js/wp-embed.js.
     297     *
     298     * See also the `verify:wp-embed` Grunt task for verifying the built file.
     299     *
    293300     * @ticket 34698
    294301     */
     
    296303        $this->assertNotContains( '&', file_get_contents( ABSPATH . WPINC . '/js/wp-embed.js' ) );
    297304    }
    298 
    299     /**
    300      * @ticket 34698
    301      *
    302      * @depends test_js_no_ampersands
    303      *
    304      * The previous test confirms that no ampersands exist in src/wp-includes/js/wp-embed.js.
    305      * However, we must also confirm that UglifyJS does not add ampersands during its
    306      * optimizations (which we tweak to avoid, but indirectly -- understandably, there's
    307      * no "don't add ampersands to my JavaScript file" option).
    308      *
    309      * So this test checks for ampersands in build/wp-includes/js/wp-embed.min.js.
    310      * In many cases, this file will not exist; in those cases, we simply skip the test.
    311      *
    312      * So when would it be run? We have Travis CI run `npm run test` which then runs, in order,
    313      * `qunit:compiled` (which runs the build) and then `phpunit`. Thus, this test will at least be
    314      * run during continuous integration.
    315      *
    316      * However, we need to verify that `qunit:compiled` runs before `phpunit`. So this test also
    317      * does a cheap check for a registered Grunt task called `test` that contains both
    318      * `qunit:compiled` and `phpunit`, in that order.
    319      *
    320      * One final failsafe: The Gruntfile.js assertion takes place before checking for the existence
    321      * of wp-embed.min.js. If the Grunt tasks are significantly refactored later, it could indicate
    322      * that wp-embed.min.js doesn't exist anymore. We wouldn't want the test to silently become one
    323      * that is always skipped, and thus useless.
    324      */
    325     function test_js_no_ampersands_in_compiled() {
    326         $gruntfile = file_get_contents( dirname( ABSPATH ) . '/Gruntfile.js' );
    327 
    328         // Confirm this file *should* exist, otherwise this test will always be skipped.
    329         $test = '/grunt.registerTask\(\s*\'test\',.*\'qunit:compiled\'.*\'phpunit\'/';
    330         $this->assertTrue( (bool) preg_match( $test, $gruntfile ) );
    331 
    332         $file = dirname( ABSPATH ) . '/build/' . WPINC . '/js/wp-embed.min.js';
    333         if ( ! file_exists( $file ) ) {
    334             return;
    335         }
    336         $this->assertNotContains( '&', file_get_contents( $file ) );
    337     }
    338 
    339305}
Note: See TracChangeset for help on using the changeset viewer.