ฉันได้เล่นกับการทดสอบการรวมกันเล็กน้อยและนี่คือสิ่งที่ฉันพบ
โดยทั่วไปฉันได้ทำตามขั้นตอนที่คล้ายกับสิ่งที่ Fooman พูดด้วยความแตกต่างบางอย่างเพื่อให้การทดสอบการรวมเข้าเป็นส่วนหนึ่งของโมดูลของฉัน
นี่คือขั้นตอนที่ฉันปฏิบัติตาม:
1- วางการทดสอบการรวมระบบของคุณภายใต้ app/code/Vendor/CustomModule/Test/Integration
2- คัดลอกdev/tests/integration/phpunit.dist.xml
ไปยังdev/tests/integration/phpunit.xml
และแทนที่
<testsuite name="Magento Integration Tests">
<directory suffix="Test.php">testsuite</directory>
<directory suffix="Test.php">../../../update/dev/tests/integration/testsuite</directory>
<exclude>testsuite/Magento/Test/Integrity</exclude>
<exclude>testsuite/Magento/MemoryUsageTest.php</exclude>
</testsuite>
กับ
<testsuite name="Magento Integration Tests">
<directory suffix="Test.php">../../../app/code/Vendor/CustomModule/Test/Integration</directory>
</testsuite>
3- จากนั้นฉันก็รันมันโดยใช้เครื่องมือ CLI bin/magento dev:test:run integration
คุณควรคำนึงถึงสิ่งที่ Fooman พูดเกี่ยวกับ "TESTS_CLEANUP" และเวลาที่ใช้ในการตั้งค่าการทดสอบการรวมระบบหากคุณเปิดใช้งานการล้างข้อมูล
ที่นี่ฉันเพิ่มตัวอย่างการทำงานสำหรับการอ้างอิงเพิ่มเติม คุณจะเห็นว่าคุณสามารถเข้าถึงตัวจัดการวัตถุและสร้างอินสแตนซ์ของคลาส Magento ได้อย่างไรรวมถึงการใช้ Magento Fixture
app / รหัส / ผู้ขาย / CustomModule / ควบคุม / สั่งซื้อ / info.php
namespace Vendor\CustomModule\Controller\Order;
use Magento\Framework\Controller\ResultFactory;
class Info
extends \Magento\Framework\App\Action\Action
{
/**
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Sales\Api\OrderRepositoryInterface $orderRepository
)
{
$this->orderRepository = $orderRepository;
parent::__construct($context);
}
/**
* Return Json OrderInfo
*
* @return \Magento\Framework\Controller\Result\Json $this
*/
public function execute()
{
$orderId = $this->getRequest()->getParam('id');
$order = $this->orderRepository->get($orderId);
$orderInfo = [
'total' => $order->getBaseGrandTotal()
];
/** @var \Magento\Framework\Controller\Result\Json $result */
$result = $this->resultFactory->create(ResultFactory::TYPE_JSON);
return $result->setData($orderInfo);
}
}
app / รหัส / ผู้ขาย / CustomModule / etc / ส่วนหน้า / routes.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="standard">
<route id="vendor_custommodule" frontName="vendor_custommodule">
<module name="Vendor_CustomModule"/>
</route>
</router>
</config>
app / รหัส / ผู้ขาย / CustomModule / etc / module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_CustomModule" setup_version="1.0.0">
<sequence>
<module name="Magento_Sales" />
</sequence>
</module>
</config>
app / รหัส / ผู้ขาย / CustomModule / ทดสอบ / บูรณาการ / ควบคุม / สั่งซื้อ / InfoTest.php
namespace Vendor\CustomModule\Controller\Order;
use Magento\TestFramework\TestCase\AbstractController;
class InfoTest extends AbstractController
{
public function getOrderInfoActionDataProvider()
{
return [
'order with one simple item' => [
'incrementId' => '100000001',
'contentType' => 'application/json',
'orderTotal' => 100
]
];
}
/**
* @dataProvider getOrderInfoActionDataProvider
* @magentoDataFixture Magento/Sales/_files/order.php
*/
public function testOrderInfoAction($incrementId, $expectedContentType, $expectedOrderTotal)
{
/** @var $objectManager \Magento\TestFramework\ObjectManager */
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
/** @var \Magento\Sales\Model\OrderFactory $orderFactory */
$orderFactory = $objectManager->get('Magento\Sales\Model\OrderFactory');
$order = $orderFactory->create();
$order->loadByIncrementId($incrementId);
$this->dispatch("vendor_custommodule/order/info/id/{$order->getId()}");
$contentType = $this->getResponse()->getHeader('Content-Type');
$this->assertEquals($expectedContentType, $contentType->getFieldValue());
$responseJson = $this->getResponse()->getBody();
$responseArray = json_decode($responseJson, true);
$this->assertEquals($expectedOrderTotal, $responseArray['total']);
}
}
app / รหัส / ผู้ขาย / CustomModule / registration.php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Vendor_CustomModule',
__DIR__
);