Фикстуры в Magento и наборе тестов eComDev (откажитесь от одной фикстуры и используйте новую)

Я пишу плагин Magento и пытаюсь протестировать его с помощью PHPUnit Testing Integration с сайта http://www.ecomdev.org. . Прямо сейчас я пытаюсь протестировать метод с двумя разными наборами настроек конфигурации, но по какой-то причине второй никогда не загружается, а первый используется снова, поэтому тесты, которые ожидают, что второй прибор не работают.

Вот проблема, сведенная к важным строкам:

Modul.php (модель)

<?php
  class MyModule_Module_Model_TestModel extends Mage_Payment_Model_Method_Abstract {

    protected $sandbox;

    public function __construct() {
      $this->sandbox = $this->getConfigData('sandbox');
    }

    public function getSandboxSetting() {
      return $this->sandbox;
    }
  }
?>

фиксация config.yaml

config
  default/payment/modul/sandbox: 0

фиксация configSB.yaml

config
  default/payment/modul/sandbox: 1

Modul.php (тест)

<?php
  class MyModule_Module_Test_Model_TestModel extends EcomDev_PHPUnit_Test_Case {

    public function setUp() {
      parent::setUp();
      $this->object = Mage::getModel('module/testmodel');
    }

    /**
    * @test
    * @loadFixture config
    */        
    public function testCorrectShopSettingsWithoutSandbox() {
      $this->assertEquals('0', $this->object->getSandboxSetting());
    } 

    /**
    * @test
    * @loadFixture configSB
    */     
    public function testCorrectShopSettingsWithSandbox() {
      $this->assertEquals('1', $this->object->getSandboxSetting());
    }

    protected function tearDown() {
      unset($this->object);
      parent::tearDown();
    }
  }
?>

К сожалению, второй тест терпит неудачу, независимо от того, в каком порядке они выполняются. На самом деле набор тестов ecomdev должен отбросить фикстуры (я посмотрел на tearDown() в case.php), но данные конфигурации все еще там и не могут быть перезаписаны. Есть ли обходной путь или это проблема с Magento/набором тестов?


person adiebler    schedule 19.03.2012    source источник
comment
Почему не официальный magento taf https://github.com/magento/taf?   -  person Dmytro Zavalkin    schedule 20.03.2012
comment
@Zyava, потому что он предназначен для функциональных тестов на основе селена (например, тест HTML вместо внутренней логики). Тесты EcomDev_PHPUnit ориентированы на конкретные единицы вашей функциональности (методы класса), а не на вывод HTML-страницы.   -  person Ivan Chepurnyi    schedule 20.03.2012
comment
Извините, я не знал, что только селеновая часть тафа была обнародована.   -  person Dmytro Zavalkin    schedule 20.03.2012


Ответы (1)


вы пробовали последнюю версию с github? Мы видели некоторые проблемы, связанные с конфигурацией в новой версии Magento, поэтому в ветке разработки они были исправлены.

Вот адрес ветки: https://github.com/IvanChepurnyi/EcomDev_PHPUnit/tree/dev

person Ivan Chepurnyi    schedule 19.03.2012
comment
Да, у меня последняя версия, только что проверил. Когда я попытался просто получить вывод для $this-›object-›getConfigData('sandbox') во втором тесте, он снова был просто 0. Поместив $this-›object = Mage::getModel('module/testmodel') в тестах тоже не помогло. (Думаю, это поможет создать объекты после загрузки фикстур...) - person adiebler; 19.03.2012
comment
@ user1230693 Какая версия Magento используется для тестов? - person Ivan Chepurnyi; 20.03.2012
comment
Magento Version 1.6.1.0 - только что заставил его работать с ›› Mage::getConfig()-›reinit(); Mage::app()-›reinitStores(); ‹‹ в setUp() вместе с ›› parent::setUp(); ‹‹. - person adiebler; 20.03.2012
comment
Вы также можете указать данные для хранилища, я думаю, что проблема в этой конфигурации по умолчанию не очищает кеш конфигурации хранилища. Попробуйте такой путь в вашем приборе stores/default/payment/modul/sandbox - person Ivan Chepurnyi; 20.03.2012
comment
Снова возникли сбои при сравнении настроек песочницы во второй раз, даже если это не была конфигурация по умолчанию. reinit() и reinitStores() замедляют тестирование, но, в конце концов, это работает. Спасибо за помощь, Иван. - person adiebler; 20.03.2012
comment
Будет исправлено в следующей версии. Пожалуйста, создайте вопрос на github, чтобы не забыть об этом :) - person Ivan Chepurnyi; 22.03.2012