Что касается моих потребностей в тестировании Magento 2, я использовал PHP Unit в качестве (более или менее) приемочного тестера - результаты тестирования серверных и HTML-запросов, внесенных в систему с моими установленными модулями. Я хотел бы иметь возможность создавать свои собственные интеграционные тесты. Позволяют ли инструменты тестирования, поставляемые с Magento 2, сторонним разработчикам создавать собственные интеграционные тесты, использующие код инфраструктуры тестирования Magento? Или мы все будем кататься сами?
То есть
- Я разработчик Magento
- Я хотел бы создать интеграционный тест
- Я хотел бы, чтобы в моем интеграционном тесте была полностью загруженная среда Magento для игры (т. Е. Использование менеджера объектов и / или внедрения зависимостей).
- Я бы хотел, чтобы мой интеграционный тест расширил его,
Magento\TestFramework\TestCase\AbstractController
чтобы у меня были те же помощники, что и в тестах Magento. - Я хотел бы иметь возможность запускать свои тесты изолированно от остального набора тестов (т.е. не нужно ждать 2 часа, чтобы выполнить мои 15 секунд тестов)
- Я хочу, чтобы мои тесты хранились отдельно от тестов Magento
На сайте dev docs есть несколько начальных статей по тестированию, но они, похоже, ориентированы на запуск тестов, поставляемых вместе с Magento, а не на создание и запуск собственных тестов. Существуют старые образцы модулей , но все они расширяют PHPUnit_Framework_TestCase
класс и кажутся модульными тестами (т. Е. Тестируют код, не зависящий от платформы Magento)
Есть ли у Magento способ сделать это?
Если нет, то кто-нибудь прокрутил свою собственную установку таким образом, чтобы тест сообщества разработчиков Magento мог принять ее в качестве стандарта?
источник
__DIR__
после которой следует косая черта (/_files
). Во-вторых, прибор загружается изнутри TestFramework, так что__DIR__
фактически он указывает на каталог TestFramework, а не на ваш собственный модуль.ComponentRegistrar
Могут быть использованы для этого:require $ObjectManager::getInstance()->get(ComponentRegistrar::class)->getPath('module', 'Foo_Bar').'/Test/Integration/_files/example.php';
Я немного поиграл с интеграционными тестами, и это то, что я нашел до сих пор.
По сути, я следовал шагам, подобным тому, что сказал Fooman, с некоторыми отличиями, чтобы сделать интеграционный тест частью моего модуля.
Вот шаги, которые я выполнил:
1- Поместите ваши интеграционные тесты под
app/code/Vendor/CustomModule/Test/Integration
2- Копировать
dev/tests/integration/phpunit.dist.xml
вdev/tests/integration/phpunit.xml
и заменить
с
3- Затем я запускаю его с помощью инструмента CLI
bin/magento dev:test:run integration
Вы должны иметь в виду, что Fooman говорит о «TESTS_CLEANUP» и времени, которое требуется для настройки интеграционных тестов, если у вас включена очистка.
Здесь я добавлю функциональный пример для дальнейшего использования. Вы увидите, как вы можете получить доступ к диспетчеру объектов и сгенерировать экземпляр классов Magento, а также использовать приборы Magento.
Приложение / код / Vendor / CustomModule / Controller / Order / info.php
Приложение / код / Vendor / CustomModule / и т.д. / интерфейс / routes.xml
Приложение / код / Vendor / CustomModule / и т.д. / module.xml
Приложение / код / Vendor / CustomModule / Test / Интеграция / Controller / Order / InfoTest.php
Приложение / код / Vendor / CustomModule / registration.php
источник