Can't find app/Mage.php when package is installed through Composer
Opened this issue · 6 comments
I add "digitalpianism/testframework": "dev-master"
to my composer.json and do all instructions in README, but when I try to run my test from console I get error
$ phpunit -c vendor/popov/magento-magmi-import/app/code/local/Popov/Magmi/Test/phpunit.xml
Warning: require_once(D:\WebServer\git\art-market\vendor\digitalpianism\testframework\lib\DigitalPianism\TestFramework\Helper/../../../../app/Mage.php): failed to open stream: No such file or directory in D:\WebServer\git\art-market\vendor\digitalpianism\testfr
amework\lib\DigitalPianism\TestFramework\Helper\Magento.php on line 39
Fatal error: require_once(): Failed opening required 'D:\WebServer\git\art-market\vendor\digitalpianism\testframework\lib\DigitalPianism\TestFramework\Helper/../../../../app/Mage.php' (include_path='.;d:/openserver/modules/php/PHP-7-x64;d:/openserver/modules/ph
p/PHP-7-x64/PEAR/pear') in D:\WebServer\git\art-market\vendor\digitalpianism\testframework\lib\DigitalPianism\TestFramework\Helper\Magento.php on line 39
My bootstrap.php
look like this
require __DIR__ . '/../../../../../../../../../htdocs/lib/DigitalPianism/TestFramework/Helper/Magento.php';
DigitalPianism_TestFramework_Helper_Magento::bootstrap();
Problem is that code in vendor/digitalpianism/testframework/lib/DigitalPianism/TestFramework/Helper/Magento.php
use path relative to original Magento directory lib/
but in my case this is path relative to Composer directory vendor/
.
As possible solution can to use package https://github.com/joshdifabio/composed for getting variable magento-root-dir
from composer.json
and based on this variable get path to app/Mage.php
. But I didn't do that, maybe you have better solution.
@agereteam is it similar to this issue ? #6 not sure if we can do shell commands with composer
@digitalpianism this is like but not the same. I really need links in my composer.json. I develop modules and copy/past changed files every time is horrible.
@agereteam can you try to edit the following file: https://github.com/digitalpianism/testframework/blob/master/lib/DigitalPianism/TestFramework/Helper/Magento.php
And replace:
require_once __DIR__.'/../../../../app/Mage.php';
With:
$dirName = dirname(__FILE__, 7);
if (preg_match('/vendor/', $dirName)) {
$dirName = dirname(__FILE__, 8);
} else {
$dirName = dirname(__FILE__, 5);
}
require_once($dirName . '/app/Mage.php');
And let me know if that works. I haven't fully tested that it's hacky but in theory it should work
No, this didn't help. I got this variables in xDebug https://www.screencast.com/t/jnB9zo0I3K
Test is running with next commands. Both give the same result
$ phpunit -c vendor/popov/magento-magmi-import/app/code/local/Popov/Magmi/Test/phpunit.xml
// or
$ phpunit -c htdocs/app/code/local/Popov/Magmi/Test/phpunit.xml
I have another idea. Script can take over all siblings directories of vendor
and search file app/Mage.php
. In which directory this file will be find, then this is root project directory.
@agereteam maybe this PR might help you: #9