我们正在使用IvanChepurnyi's EcomDev_PHPUnit,这似乎有一些很好的功能,可以用Magento编写单元和集成测试,包括有关向数据库加载数据和从数据库加载数据的声明功能。只是,我只能让它工作到一半:我可以使用fixture来获取数据到数据库,但是我的测试总是从数据库以外的意外地方获取数据,比如config.xml。 / p>
例如,假设我创建了一个带有管理配置文件的简单模型:
应用程序/代码/小区/我/事情的/ etc / config.xml中:
<?xml version="1.0"?>
<config>
<modules>
<My_Thing>
<version>0.0.1</version>
</My_Thing>
</modules>
<global>
<helpers>
<thing>
<class>My_Thing_Helper</class>
</thing>
</helpers>
</global>
<default>
<thing>
<it>
<arbitrary>value</arbitrary>
</it>
</thing>
</default>
<phpunit>
<suite>
<modules>
<My_Thing/>
</modules>
</suite>
</phpunit>
</config>
应用程序/代码/小区/我/事情的/ etc / settings.xml中:
<?xml version="1.0"?>
<config>
<tabs>
<thing translate="label" module="my_thing">
<label>Thing</label>
</thing>
</tabs>
<sections>
<thing translate="label">
<label>Thing Settings</label>
<tab>thing</tab>
<frontend_type>text</frontend_type>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<groups>
<it translate="label">
<label>It</label>
<frontend_type>text</frontend_type>
<sort_order>120</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<arbitrary translate="label">
<label>Arbitrary</label>
<frontend_type>text</frontend_type>
<validate>required-entry</validate>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</arbitrary>
</fields>
</it>
</groups>
</thing>
</sections>
</config>
应用程序/代码/小区/我/事情/助手/ Data.php:
<?php
class My_Thing_Helper_Data extends Mage_Core_Helper_Abstract
{
const CONFIG_IT_ARBITRARY = 'thing/it/arbitrary';
/**
* Get the arbitrary value.
*
* @return string
*/
public static function getArbitrary()
{
return Mage::getStoreConfig(self::CONFIG_IT_ARBITRARY);
}
}
应用程序/代码/小区/我/事情/测试/助手/ DataTest.php:
<?php
class My_Thing_Helper_DataTest extends EcomDev_PHPUnit_Test_Case_Controller
{
/**
* The helper we're testing.
*/
public $target = null;
/**
* Set up configuration for testing
*/
public function setUp()
{
parent::setUp();
$this->target = Mage::helper('thing');
}
/**
* Test that paths are joined correctly.
*
* @loadFixture
*/
public function testGetArbitrary()
{
$this->assertEquals(
'something',
$this->target->getArbitrary()
);
}
}
应用程序/代码/小区/我/事情/测试/助手/数据测试/ testGetArbitrary.yaml:
tables:
core/config_data:
- path: thing/it/arbitrary
value: something
我意识到上面的测试是设计的,但重点是即使我创建了一个夹具来将“任意”值设置为“某事”,测试也会失败,因为它从config.xml默认值中获取值< em>即使'something'值在数据库中。这是为什么?为了从测试数据库中获取数据而不是缓存或config.xml默认值,我还需要为phpunit或EcomDev做一些其他技巧吗?
顺便说一下,如果我在不断轮询测试数据库的值时运行phpunit
,我做看到something
插入到正确的位置。测试只是从那里得不到价值。