我遇到一个问题,断言blocks属性包含一个数组键。
我使用以下XML添加了指向我的客户帐户区域的链接:
<customer_account>
<reference name="customer_account_navigation">
<action method="addLink" translate="label" module="namespace_ordermigration">
<name>migration</name>
<path>migration/order/list/</path>
<label>Migrated Orders</label>
</action>
</reference>
</customer_account>
在addLink
块上调用Mage_Customer_Block_Account_Navigation
方法,该方法具有受保护的属性$_links = array();
这是我用EcomDev_PHPUnit_Test_Case_Controller
测试得到的最接近的地方:
public function testMyAccountButtonDefined()
{
$this->dispatch('migration/order/list');
$this->assertLayoutBlockPropertyEquals('customer_account_navigation', '_links', array('migration' => ''));
}
失败了:
1) Namespace_OrderMigration_Test_Controller_OrderController::testMyAccountButtonDefined
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
Array (
- 'migration' => ''
+ 'migration' => Varien_Object Object (...)
+ 'account' => Varien_Object Object (...)
+ 'account_edit' => Varien_Object Object (...)
+ 'address_book' => Varien_Object Object (...)
...
有没有人知道如何访问它正在测试的属性,所以我可以用结果进行更简单的PHPUnit测试?
另一个可能的选择是围绕assertContains
中PHPUnit_Framework_Assert
的{{1}}方法创建一个新的包装器,称为EcomDev_PHPUnit_Test_Case_Controller
。这是相当多的工作,它可能会更好地暴露响应。
答案 0 :(得分:0)
这是我结束测试的一个块属性,包含我在layout.xml中定义的数组键,更多的是直接路由,只有当属性在块中公开时才可能,所以不是一个有效的答案只是一个解决方法
public function testMyAccountButtonDefined()
{
$this->dispatch('migration/order/list');
/* @var $block Mage_Customer_Block_Account_Navigation */
$block = $this->app()->getLayout()->getBlock('customer_account_navigation');
$this->assertContains('migration', array_keys($block->getLinks()));
}