Tip #5: Secure Area
Problem: test cases extending EcomDev_PhpUnit_Test_Case_Controller
with customer fixture fail with Cannot complete this operation from non-admin area because Magento is in area=frontend
mode during tearDown and does not allow deletion of customers. The same problem occurs when you try to delete customers in a test outside of an adminhtml context.
The customer model checks if the isSecureArea
flag is set in the Magento registry, so to solve the problem, we set this flag in the test. There are two possible ways to do it:
1.) If you create and delete customers within the test:
/* * @test * @registry isSecureArea */ public function testThatNeedsToDeleteCustomers() { Mage::register('isSecureArea', true); // ... }
(note the @registry
annotation which will reset the flag afterwards, see Tip #1)
2.) If you use a customer fixture:
protected function setUp() { Mage::register('isSecureArea', true); parent::setUp(); } protected function tearDown() { parent::tearDown(); Mage::unregister('isSecureArea'); }
or if you use class wide fixtures:
public static function setUpBeforeClass() { Mage::register('isSecureArea', true); } public static function tearDownAfterClass() { Mage::unregister('isSecureArea'); }