1. Go to this page and download the library: Download jsiefer/mage-mock library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jsiefer / mage-mock example snippets
use JSiefer\ClassMocker\ClassMocker;
use JSiefer\MageMock\MagentoMock;
$magentoFramework = new MagentoMock();
$classMocker = new ClassMocker();
// optional cache dir for generated classes
$classMocker->setGenerationDir('./var/generation');
$classMocker->mockFramework($magentoFramework);
$classMocker->enable();
$mock->expects($this->once())->method('save');
$mock->save = function() {
return $this;
}
/**
* Class Mage_Core_Model_Abstract
*
* @pattern Mage_Core_Model_Abstract
* @sort 100
*/
trait My_Mage_Core_Model_Abstract_Stub
{
/**
* Save object data
*
* @return $this
*/
public function save()
{
$this->_beforeSave();
$this->_afterSave();
$this->_afterSaveCommit();
return $this;
}
}
// Then in your bootstrap.php
$magentoFramework = new MagentoMock();
$classMocker = new ClassMocker();
$classMocker->registerTrait(My_Mage_Core_Model_Abstract_Stub::class)
$classMocker->setGenerationDir('./var/generation');
$classMocker->mockFramework($magentoFramework);
$classMocker->enable();
use Mage_Sales_Model_Quote as Quote;
use Mage_Catalog_Model_Product as Product;
use Mage_Customer_Model_Customer as Customer;
class MyTest extends JSiefer\MageMock\PHPUnit\TestCase
{
/**
* Test mocking mage
*
* @return void
* @test
*/
public function testMockingMage()
{
// This is the Mage mock
$mage = $this->getMage();
$mage->expects($this->once())->method('getBaseUrl')->willReturn('foobar');
$baseUrl = Mage::getBaseUrl(); // foobar
}
/**
* Example for mocking a singleton
*
* @return void
* @test
*/
public function testSingleton()
{
$customer = new Customer();
$customer->setFirstname('Joe');
// Create customer session mock
$session = $this->getSingleton('catalog/session');
$session->expects($this->once())->method('getCustomer')->willReturn($customer);
// Now you can use this session, only valid in this test
$session = Mage::getSingleton('catalog/session');
}
/**
* Creating model mocks on the fly using model factories
*
* Supose multiple Product models get initiated and you need them to return
* a unique id by default.
*
* @return void
* @test
*/
public function testModelFactory()
{
$idCounter = 1;
// Register a factory closure for creating class instances
// Factories are registred by the full class name
$this->registerModelFactory(Product::class, function() use (&$idCounter) {
$instance = new Product();
$instance->expects($this->once())->method('getId')->will($this->returnValue($idCounter++));
return $instance;
});
$productA = Mage::getModel('catalog/product');
$productB = Mage::getModel('catalog/product');
$this->assertNotSame($productA, $productB, "Both product should be two different instances");
$this->assertEquals(1, $productA->getId());
$this->assertEquals(2, $productB->getId());
}
}
/**
* Class Magemock_Sample_Model_Vehicle
*
* @method string getId()
* @method string getName()
* @method string getNumberOfDoors()
* @method string getNumberOfSeats()
* @method string getNumberOfWheels()
* @method string getTopSpeed()
*/
class Magemock_Sample_Model_Vehicle extends Mage_Core_Model_Abstract
{
/**
* Initialize resources
*
* @return void
*/
protected function _construct()
{
$this->_init('sample/vehicle');
}
/**
* @return $this
*/
protected function _beforeSave()
{
if (!$this->getName()) {
throw new DomainException("Vehicle must have a name");
}
return parent::_beforeSave();
}
/**
* Is vehicle a bile
*
* @return bool
*/
public function isBike()
{
return $this->getNumberOfWheels() == 2 &&
$this->getNumberOfDoors() == 0;
}
/**
* Load bike by name
*
* @param string $name
*
* @return $this
*/
public function loadByName($name)
{
$this->load($name, 'name');
return $this;
}
}
/**
* Simple unit test for Vehicle model
*/
class VehicleTest extends \PHPUnit_Framework_TestCase
{
/**
* Simple test to see that all classes
* are initialized during testing without
* the presents of the magento framework
*
* @test
*/
public function testVehicleClassInstance()
{
$vehicle = new \Magemock_Sample_Model_Vehicle();
$this->assertInstanceOf('Mage_Core_Model_Abstract', $vehicle);
$this->assertInstanceOf('Varien_Object', $vehicle);
$this->assertInstanceOf('ArrayAccess', $vehicle);
// class const example
$this->assertEquals(
'COLLECTION_DATA',
\Mage_Core_Model_Resource_Db_Collection_Abstract::CACHE_TAG
);
}
/**
* Test _construct() method
*
* You can call protected methods by using the helper
* function __callProtectedMethod($name, array $args = [])
*
* @return void
* @test
*/
public function validateConstructMethod()
{
/** @var \Magemock_Sample_Model_Vehicle|\JSiefer\ClassMocker\Mock\BaseMock $product */
$product = new \Magemock_Sample_Model_Vehicle();
$product->expects($this->once())->method('_init')->with('sample/vehicle');
// call protected method _construct
$product->__callProtectedMethod('_construct');
}
/**
* Test before vehicle save validation
*
* @return void
* @test
*/
public function testSaveValidation()
{
$vehicle = new \Magemock_Sample_Model_Vehicle();
$vehicle->setName("foobar");
$vehicle->save();
$this->assertEquals('foobar', $vehicle->getName());
try {
$vehicle = new \Magemock_Sample_Model_Vehicle();
$vehicle->save();
$this->fail("Expected validation error for missing name");
}
catch(\Exception $e) {
$this->assertEquals(
'Vehicle must have a name',
$e->getMessage(),
'Caught wrong exception'
);
}
}
/**
* Test isBike() method
*
* @return void
* @test
*/
public function testIsBikeMethod()
{
$vehicle = new \Magemock_Sample_Model_Vehicle();
$this->assertFalse(
$vehicle->isBike(),
'Vehicle should not be a bike by default'
);
$vehicle->setNumberOfWheels(2);
$vehicle->setNumberOfDoors(0);
$this->assertTrue(
$vehicle->isBike(),
'Vehicle should be a bike if it has two wheels and no doors'
);
}
/**
* Test load by name method
*
* Since the Magemock_Sample_Model_Vehicle class extends a class-mocker generated
* class all PHPUnitObjectMock methods are available
*
* @return void
* @test
*/
public function testLoadByName()
{
$vehicle = new \Magemock_Sample_Model_Vehicle();
$vehicle->expects($this->once())
->method('load')
->with($this->equalTo('foobar'), $this->equalTo('name'));
$result = $vehicle->loadByName('foobar');
$this->assertSame($vehicle, $result, 'loadByName should return $this');
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.