Попытка добавить AspectMock в наш проект Magento

В $ newJob у нас есть довольно большой проект Magento v1.9, в котором нет абсолютно никаких автоматических тестов. Все изменения были исторически проверены вручную, запустив локальную виртуальную машину с копией рабочей базы данных и просто нажав на нее. Мне дали разрешение на добавление модульных тестов, когда я пишу новый код, но так как большая часть логики бэкенда включает вызовы Mage::getModel() и друзья, действительно сложно писать любые тесты, даже для моего собственного кода, который часто окружен кодом, который уже существует.

Потом наткнулся AspectMock, что кажется идеальным для того, что я пытаюсь сделать! Но я в худшее время пытаюсь заставить его работать. Я полагаю, это потому, что мы используем то, что кажется довольно нестандартной структурой каталогов для нашего проекта (я также упомянул, что я никогда раньше не работал с PHP или Magento?). Мы используем modman и composer, и наше дерево проектов выглядит примерно так:

.modman
|-magento_plugin1
|-magento_plugin2
|-our-src
|-app
|-code
|-community
|-core
|-local
|-CompanyName
|-ModuleName
|-Block
|-controllers
|-data
|-etc
|-Helper
|-lib
|-Model
|-sql
|-design
|-etc
|-locale
|-...
|-lib
|-var
|-...
|-tests
|-unit
|-CompanyName
|-ModuleName
|-Helper
|-SomeTest.php
|-bootstrap.php
|-phpunit.xml
|-...
vendor
composer.lock
...
htdocs <- once you've run the setup scripts
|-app
|-code
|-community
|-core
|-local
|-*symlink to our_src from modman*
|-design
|-...
|-.htaccess
|-bootstrap.php
|-Mage.php
|-...
|-lib
|-var
|-...

Согласно документации, я добавил его в наш composer.json:

"require-dev": {
"phpunit/phpunit": "^6",
"codeception/aspect-mock": "*"},

Мой phpunit.xml, который существует в tests каталог это:

<?xml version="1.0" encoding="UTF-8" ?>
<phpunit backupGlobals="false"backupStaticAttributes="false"colors="true"convertErrorsToExceptions="true"convertNoticesToExceptions="true"convertWarningsToExceptions="true"processIsolation="false"stopOnFailure="false"syntaxCheck="true"bootstrap="./bootstrap.php">
<testsuite name="Magento Unit Test">
<directory>.</directory>
</testsuite>
</phpunit>

И файл bootstrap.php (в настоящее время):

<?php
require __DIR__ . '/../../../../vendor/autoload.php';

$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
'appDir' => '../../../../.modman', // I don't know what this should be
'debug' => true,
'includeDir' => ['../../../../htdocs/app'], // I don't know what this should be
'cacheDir' => '/tmp/AspectMock',
]);

//Include Magento libraries
require_once '../../../../htdocs/app/Mage.php';

//Start the Magento application
Mage::app('default');

//Avoid issues "Headers already sent"session_start();

И я написал свой SomeTest.php:

<?php

namespace SomeTest;

use \PHPUnit\Framework\TestCase;
use \AspectMock\Test;
use Mage;

final class Hub_Account_Helper_Iq_DataTest extends TestCase
{
public function test1()
{
Test::double('Mage', ['getModel' => 'yeah']);
$this->assertEquals('yeah', Mage::getModel('cms/page'));
}
}

Когда я бегу phpunit, тест не пройден, так как Mage :: getModel () не возвращает строку (и поэтому не равен 'yeah'). Это означает, что Mage не издеваются

Я пробовал различные перестановки appDir а также includePaths но безрезультатно.

  • Оставляя оба неопределенных ведет к PHP Fatal error: Uncaught Error: Class 'Go\ParserReflection\Instrument\PathResolver' not found in /path/to/project/vendor/goaop/parser-reflection/src/ReflectionEngine.php:218
  • настройка appDir => '../../../..' (корень каталога проекта) приводит к тому же, что и выше (с или без includePaths устанавливается).
  • настройка appDir => '../../../../htdocs' (опять же, с или без includePaths) приводит к тому, что тесты запускаются и дают сбой, потому что Маг фактически не подвергается насмешкам.
  • настройка appDir => '../../../../htdocs/app' такой же, как указано выше.
  • настройка appDir => '../../../../.modmap/our-src/' или же '../../../../.modman/our-src/app' та же…

Пожалуйста помоги! И благодарю вас.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector