Tôi đã chơi một chút với các bài kiểm tra tích hợp, và đây là những gì tôi tìm thấy cho đến nay.
Về cơ bản, tôi đã làm theo các bước tương tự như những gì Fooman nói, với một số khác biệt để làm cho bài kiểm tra tích hợp là một phần của mô-đun của tôi.
Đây là các bước tôi đã làm theo:
1- Đặt các bài kiểm tra tích hợp của bạn dưới app/code/Vendor/CustomModule/Test/Integration
2- Sao chép dev/tests/integration/phpunit.dist.xml
vàodev/tests/integration/phpunit.xml
và thay thế
<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>
với
<testsuite name="Magento Integration Tests">
<directory suffix="Test.php">../../../app/code/Vendor/CustomModule/Test/Integration</directory>
</testsuite>
3- Sau đó, tôi chạy nó bằng công cụ CLI bin/magento dev:test:run integration
Bạn nên ghi nhớ những gì Fooman nói về "TESTS_CLEANUP" và thời gian cần thiết để thiết lập các bài kiểm tra tích hợp nếu bạn bật tính năng dọn dẹp.
Ở đây tôi thêm một ví dụ chức năng để tham khảo thêm. Bạn sẽ thấy cách bạn có thể truy cập trình quản lý đối tượng và tạo phiên bản của các lớp Magento, cũng như sử dụng đồ đạc Magento.
ứng dụng / mã / Nhà cung cấp / CustomModule / Trình điều khiển / Đặt hàng / 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);
}
}
ứng dụng / mã / Nhà cung cấp / CustomModule / etc / frontend / Rout.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>
ứng dụng / mã / Nhà cung cấp / 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>
ứng dụng / mã / Nhà cung cấp / CustomModule / Kiểm tra / Tích hợp / Trình điều khiển / Đặt hàng / 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']);
}
}
ứng dụng / mã / Nhà cung cấp / CustomModule / đăng ký.php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Vendor_CustomModule',
__DIR__
);