0

I tried to perform a test on the WC_VERSION constant.

The main class :

class WC_Custom_Variable_Products_Dependencies {

    /** minimum WooCommerce version required by this plugin */
    const MINIMUM_WC_VERSION = '3.7.9';

    public function __construct() {

        add_action( 'admin_init', [$this, 'check_wc_version']);
    }

    protected function check_wc_version() {

         return  version_compare(WC_VERSION, self::MINIMUM_WC_VERSION , '>=');
    }
}

The test class :

 require_once 'includes/class-wc-custom-variable-products-dependencies.php';

 class WC_Custom_Variable_Products_DependenciesTest extends WP_UnitTestCase {

     public function setUp() {
        parent::setUp();
        $this->class_instance = new WC_Custom_Variable_Products_Dependencies();
     }

     /**
     * Tests the protected functions 
     * 
     * @param Object $method
     * @return bool
     */
    private function makeReflection($method) {

        $reflection = new ReflectionClass('WC_Custom_Variable_Products_Dependencies');
        $protectedMethod = $reflection->getMethod($method);
        $protectedMethod->setAccessible(true);

        return $protectedMethod->invokeArgs($this->class_instance, ['']);
    }
    public function test_check_wc_version() {

        $result = $this->makeReflection('check_wc_version');
        $this->assertTrue($result);
    }
}

And PHPunit return : Use of undefined constant WC_VERSION - assumed 'WC_VERSION' does this mean in the test, Woocommerce is not loaded?

0

return defined('WC_VERSION'); should fix since defined() accepts a string as parameter. https://www.php.net/manual/en/function.defined.php

If you use: require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); adjusting your path if the installation is in a subrdir you load all the WP environment including active plugins etc

| improve this answer | |
  • yes i corrected that but now i have Failed asserting that false is true. means woocommerce is not active ? – Younes.D Jan 13 at 9:09
  • I think you should post a more detailed code, these are just pieces – Andrea Somovigo Jan 13 at 9:37
  • finally, I fixed the issue. simply load woocommerce sripts: require_once '../woocommerce/woocommerce.php'; . it 's a good practice or not ? – Younes.D Jan 13 at 10:29
  • require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); adjust your path if the installation is in a subrdir. In this way you load all the WP environment – Andrea Somovigo Jan 13 at 10:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.