For years, the test framework EcomDev_PHPUnit is quasi-standard for Magento unit tests. The current version is 0.3.7 and last state of official documentation is version 0.2.0 – since then, much has changed which you have to search yourself in code and GitHub issues. This series shall collect practical usage tips.
Tip #9: Checkout Test
3 Years ago I already wrote an article about how to write a checkout integration test. But the practices used there are not longer up to date and some workarounds have become unnecessary. This post shows what’s necessary to write a test that simulates the Magento checkout, using techniques learned in Tip #1.
- Since there are some singletons involved, make sure to reset their state:
/* * @test * @singleton checkout/session * @singleton customer/session * @singleton checkout/cart */
- You should visit the cart page once to trigger totals collection. Assuming, the customer id is 1 and she has an active quote (from previously added products in the test or from a quote fixture), you start with:
$this->customerSession(1); $this->dispatch('checkout/cart');
- Before each new request, you have to reset the checkout session singleton manually within the test, otherwise the quote is not reloaded and you might even lose it completely:
Mage::unregister('_singleton/checkout/session'); $this->customerSession(1); $this->dispatch('checkout/onepage');
- Sometimes you want to logout a customer with active shopping cart. This needs three steps:
Mage::getSingleton('customer/session')->logout(); Mage::getSingleton('checkout/cart')->unsetData(); $this->guestSession();