Приспособления в 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;
    }
  }
?>

fixture config.yaml

config
  default/payment/modul/sandbox: 0

fixture 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 вместо backend логика). Тестовете на EcomDev_PHPUnit са ориентирани към определени единици от вашата функционалност (методи на клас), а не към извеждане на HTML страница.   -  person Ivan Chepurnyi    schedule 20.03.2012
comment
Съжалявам, не знаех, че само селеновата част от taf е публична.   -  person Dmytro Zavalkin    schedule 20.03.2012


Отговори (1)


пробвал ли си най-новата версия от github? Видяхме някои проблеми, свързани с конфигурацията с новата версия на Magento, така че в клона за разработка това беше коригирано.

Ето URL адреса на клона: 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 версия 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