EcomDev_PHPUnit断言块属性包含

时间:2014-08-19 10:02:42

标签: php magento phpunit

我遇到一个问题,断言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测试?

另一个可能的选择是围绕assertContainsPHPUnit_Framework_Assert的{​​{1}}方法创建一个新的包装器,称为EcomDev_PHPUnit_Test_Case_Controller。这是相当多的工作,它可能会更好地暴露响应。

1 个答案:

答案 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()));
}