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?

1 Answer 1

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

4
  • yes i corrected that but now i have Failed asserting that false is true. means woocommerce is not active ?
    – Younes.D
    Commented Jan 13, 2020 at 9:09
  • I think you should post a more detailed code, these are just pieces Commented Jan 13, 2020 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
    Commented Jan 13, 2020 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 Commented Jan 13, 2020 at 10:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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