dev-master
9999999-devA simple test framework module to develop integration and unit tests on Magento 1
OSL-3.0
The Requires
Wallogit.com
2017 © Pedro Peláez
A simple test framework module to develop integration and unit tests on Magento 1
A simple test framework module that can be used to create unit and integration tests on Magento 1., (*1)
Test folder under your module folderTest folder create the following files:phpunit.xml with the following content:, (*2)
<?xml version="1.0"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
colors="true"
bootstrap="bootstrap.php"
backupGlobals="false"
verbose="true"
>
<testsuites>
<testsuite name="Magento Integration Tests">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>
Note that you can change most of the file here, the important part being the bootstrap.php file declaration., (*3)
bootstrap.php with the following content:, (*4)
<?php require __DIR__ . '/../../../../../../lib/DigitalPianism/TestFramework/Helper/Magento.php'; DigitalPianism_TestFramework_Helper_Magento::bootstrap();
Please note that you may have to adapt the link to lib/DigitalPianism/TestFramework/Helper/Magento.php depending on your Magento structure., (*5)
Here is a sample of a controller test:, (*6)
Under your Test folder create a MyTest.php (your test files must be nammed accordingly to the declaration in your phpunit.xml.dist file, in the example above we declared a Test.php suffix):, (*7)
<?php
class Vendor_Module_Test_MyTest extends \PHPUnit_Framework_TestCase {
public function setUp()
{
// Stub response to avoid headers already sent problems
$stubResponse = new \DigitalPianism_TestFramework_Controller_HttpResponse();
Mage::app()->setResponse($stubResponse);
// Possible parameter
// Mage::app()->getRequest()->setParam('myparameter', 'myvalue');
// Use the controller helper
$controllerTestHelper = new \DigitalPianism_TestFramework_Helper_ControllerTestHelper($this);
// Dispatch a GET request
$controllerTestHelper->dispatchGetRequest('route', 'controller', 'action');
// Dispatch a POST request
//$controllerTestHelper->dispatchPostRequest('route', 'controller', 'action');
}
public function testSomething()
{
// Get the body
$body = Mage::app()->getResponse()->getBody(true);
// Get the headers
$headers = Mage::app()->getResponse()->getHeaders();
// Get a block
$block = Mage::app()->getLayout()->getBlock('block_name');
// Do your tests here
}
}
As you may have noticed, the bootstrap.php injects a custom instance of the config class DigitalPianism_TestFramework_Model_Config, (*8)
This class declares several new methods:, (*9)
setModelTestDouble for model test doublessetResourceModelTestDouble for resource model test doublessetHelperTestDouble for helper test doublesTo use test doubles you can do the following in your setUp method., (*10)
Let's say you want to check what template ID is assigned to Mage_Core_Model_Email_Template_Mailer when the new customer account email is sent:, (*11)
$mailer = Mage::getModel('core/email_template_mailer');
Mage::getConfig()->setModelTestDouble('core/email_template_mailer', $mailer);
$customer->sendNewAccountEmail();
$this->assertSame($expectedEmailTemplateId, $mailer->getTemplateId());
You can create fixtures programmatically in your code., (*12)
A good recommendation to avoid having to manually delete your fixtures is to call Mage::getSingleton('core/resource')->getConnection('core_write')->beginTransaction(); in the setUp method and then call Mage::getSingleton('core/resource')->getConnection('core_write')->rollBack(); in the tearDown method, (*13)
A simple test framework module to develop integration and unit tests on Magento 1
OSL-3.0