0

I am creating the Integration test in my custom module. I have installed the module in vendor folder structure is like as vendor/[ModuleVendor]/[ModuleName]/Src

I am using below command to run the integration test for custom module only

php vendor/phpunit/phpunit/phpunit -c dev/tests/integration/phpunit.xml vendor/[ModuleVendor]/[ModuleName]/src/Test/Integration/

I am getting below error while run this command

PHPUnit 9.5.28 by Sebastian Bergmann and contributors. Could not use "Magento\TestFramework\SuiteLoader" as loader.

I have changed the phpunit.xml file like as

<testsuites>
        <!--<testsuite name="Magento Integration Tests">
            <file>testsuite/Magento/IntegrationTest.php</file>
        </testsuite>-->
        <!-- Memory tests run first to prevent influence of other tests on accuracy of memory measurements -->
        <!--<testsuite name="Memory Usage Tests">
            <file>testsuite/Magento/MemoryUsageTest.php</file>
        </testsuite>
        <testsuite name="Magento Integration Tests Real Suite">
            <directory>testsuite</directory>
            <directory>../../../app/code/*/*/Test/Integration</directory>
            <exclude>testsuite/Magento/MemoryUsageTest.php</exclude>
            <exclude>testsuite/Magento/IntegrationTest.php</exclude>
        </testsuite>-->
        <testsuite name="my integration">
            <directory suffix="Test.php">../../../vendor/[ModuleVendor]/[ModuleName]/src/Test/Integration</directory>
            <exclude>../../../app/code/Magento</exclude>
            <exclude>../../../vendor/magento</exclude>
        </testsuite>
    </testsuites>

Added the product fixture in file vendor/[ModuleVendor]/[ModuleName]/src/Test/Integration/_files/product_simple.php

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);
use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\Indexer\Product\Price\Processor;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use Magento\Catalog\Model\Product\Visibility;
use Magento\TestFramework\Helper\Bootstrap;

/** @var $product \Magento\Catalog\Model\Product */
$product = Bootstrap::getObjectManager()
    ->create(\Magento\Catalog\Model\Product::class);

/*
 * Creation of Quote on Test Websites
 */
/** @var ProductRepositoryInterface $productRepository */
$productRepository = $objectManager->create(ProductRepositoryInterface::class);

/** @var ProductInterface $product */
$product = $objectManager->create(ProductInterface::class);
$product->setTypeId('simple')
    ->setName('Simple Product Integration test')
    ->setSku('simpleintegration')
    ->setWebsiteIds([0,1,2,3])
    ->setPrice(60)
    ->setMetaTitle('meta title')
    ->setMetaKeyword('meta keyword')
    ->setMetaDescription('meta description')
    ->setVisibility(Visibility::VISIBILITY_BOTH)
    ->setStatus(Status::STATUS_ENABLED)
    ->setStockData(['use_config_manage_stock' => 0])
    ->setAttributeSetId(4)
    ->setIsSalable(true)
    ->setSalable(true);
$product = $productRepository->save($product);

I also created an controller to check the integration test. vendor/[ModuleVendor]/[ModuleName]/src/Test/Integration/Controller/CustomTest.php

<?php
namespace [ModuleVendor]\[ModuleName]\Test\Integration\Controller;
use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\Session;
use Magento\Framework\Registry;
use Magento\TestFramework\Catalog\Model\ProductLayoutUpdateManager;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\Helper\Xpath;
use Magento\TestFramework\TestCase\AbstractController;
/**
 * Checks product view on storefront
 *
 * @see \Magento\Catalog\Controller\Product
 *
 * @magentoDbIsolation enabled
 */
class CustomTest extends \Magento\TestFramework\TestCase\AbstractController
{
    /** @var Registry */
    private $registry;

    /** @var ProductRepositoryInterface */
    private $productRepository;

    /** @var Session */
    private $session;

    /**
     * @magentoDataFixture [ModuleVendor]/ModuleName]/controllers/_files/product_simple.php
     * @magentoAppArea frontend
     * @return void
     */
    public function testViewAction()
    {
        $product = $this->productRepository->get('simpleintegration');
        $this->dispatch(sprintf('catalog/product/view/id/%s', $product->getEntityId()));
        $currentProduct = $this->registry->registry('current_product');
        $this->assertInstanceOf(ProductInterface::class, $currentProduct);
        $this->assertEquals($product->getEntityId(), $currentProduct->getEntityId());
        $this->assertEquals($product->getEntityId(), $this->session->getLastViewedProductId());

        $responseBody = $this->getResponse()->getBody();
        /* Product info */
        $this->assertStringContainsString($product->getName(), $responseBody);
        $this->assertStringContainsString($product->getDescription(), $responseBody);
        $this->assertStringContainsString($product->getShortDescription(), $responseBody);
        $this->assertStringContainsString($product->getSku(), $responseBody);

        /* Stock info */
        $this->assertStringContainsString('$1,234.56', $responseBody);
        $this->assertStringContainsString('In stock', $responseBody);
        $this->assertStringContainsString((string)__('Add to Cart'), $responseBody);
        /* Meta info */
        $this->assertStringContainsString('<title>Simple Product 1 Meta Title</title>', $responseBody);
        $this->assertEquals(
            1,
            Xpath::getElementsCountForXpath(
                '//meta[@name="keywords" and @content="Simple Product 1 Meta Keyword"]',
                $responseBody
            )
        );
        $this->assertEquals(
            1,
            Xpath::getElementsCountForXpath(
                '//meta[@name="description" and @content="Simple Product 1 Meta Description"]',
                $responseBody
            )
        );
    }
}

Thanks

1
  • Error like as below PHPUnit 9.5.28 by Sebastian Bergmann and contributors. Could not use "Magento\TestFramework\SuiteLoader" as loader. === Memory Usage System Stats === Memory usage (OS): 111.29M (172.54% of 64.50M reported by PHP) Estimated memory leak: 46.79M (42.04% of used memory)
    – Jack
    Commented May 2, 2023 at 8:58

1 Answer 1

0

Workaround is:

  1. Specify full path for SuiteLoader.php in /dev/tests/integration/phpunit.xml

testSuiteLoaderFile="<Magento root path>/dev/tests/integration/framework/Magento/TestFramework/SuiteLoader.php"

  1. When run in CLI also use full path to phpunit.xml

./vendor/bin/phpunit -c <Magento root path>/dev/tests/integration/phpunit.xml

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.