承接 n-educatio/testbundle 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

n-educatio/testbundle

Composer 安装命令:

composer require n-educatio/testbundle

包简介

Framework for Specification by Example and e2e testing

README 文档

README

Paczka usprawnia mechanizm Symfonowskiego ładowania fixturesów. Paczka jest całkowicie autonomiczna, oraz jest pokryta testami jednostkowymi w 100%. Co więcej, TestBundle wprowadza nową zasadę odwoływania się do konkretnych elementów na stronie za pomocą tak zwanych uchwytów.

Build Status

Instalacja

Zmiany dla pliku composer.json

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "n-educatio/testbundle",
            "version": "dev-master",
            "source": {
                "type": "git",
                "url": "git@github.com:n-educatio/TestBundle.git",
                "reference": "master"
            }
        }
    }
],
"require": {
    "n-educatio/testbundle": "dev-master"
},
"autoload": {
    "psr-0": { 
        "Neducatio\\TestBundle": "vendor/n-educatio/testbundle/src"
    }
}

Następnie instalujemy brakujące vendorsy:

php composer.phar install

Uruchamianie testów paczki TestBundle

ant test - testy phpunit oraz testy behat

Przykład użycia fixturesów

Przykład można zobaczyć tutaj

Przykład użycia uchwytów

Przykład testu dla zmiany języka:

Kontekst

class LanguageContext extends BaseSubContext
{
  /**
   * Change website language
   *
   * @param string $language New langauge
   *
   * @When /^I change language to ([^"]*)$/
   */
  public function changeLanguage($language)
  {
    $this->setPage(LanguagePanel::NAME);
    $this->getPage()->changeLanguage($language);
  }
}

W naszym przypadku PageObjectem może stać się każdy element na stronie, taki jak menu, panel językowy, itp. Na co należy zwrócić uwagę to pole $proofSelector, które informuje o zasięgu działania PageObjectu.

class LanguagePanel extends BasePageObject
{
  const NAME = __CLASS__;
  protected $proofSelector = '.t_languages';
  /**
   * Changes language
   *
   * @param string $language Language
   */
  public function changeLanguage($language)
  {
    //Nasze uchwyty w tym przypadku to 
    //t_language_polish
    //t_language_english 
    $this->get('language_' . $language)->click();
  }
}

Zauważ, że metoda get() pobiera teraz uchwyt id, który musi być zahardkodowany w htmlu jako t_uchwyt.

Podział na Persony/itp

Naszym celem jest wczytanie tylko konkrentych Fixturesów potrzebnych do odpalenia testów, stąd każdy Fixture deklarowany jest jako konkrenta Osoba/Kurs/Komentarz/itd, który posiada unikatowe właściwości i atrybuty. Powiedzmy, że w naszym systemie istnieje dwóch testowych użytkowników: Julia Lazy ( persona, która jest już zarejestrowana w serwisie ) oraz Amy Fresh ( persona nie powiązana jeszcze w żaden sposób z aplikacją, ale posiadająca swój własny adres email, nazwę itp. Tworzymy je w następujący sposób: Nasza Amy Fresh

class LoadAmyFreshUserData extends LoadActorUserData
{
  const NAME = __CLASS__;
  protected $order = 100;
  protected $userData = array(
    'AmyFresh' => array(
      "username" => "amy.fresh@example.com",
      "description" => "Teacher that visits the app for the first time and wants to give it a try",
      "roles" => "ROLE_USER",
      "firstname" => "Amy",
      "lastname" => "Fresh",
      "registered" => false,
    ),
  );
}

Oraz Julia Lazy

class LoadJuliaLazyUserData extends LoadActorUserData
{
  const NAME = __CLASS__;
  protected $order = 101;
  protected $userData = array(
    'JuliaLazy' => array(
      "username" => "julia.lazy@example.com",
      "description" => "User that is only registered in the system",
      "roles" => "ROLE_USER",
      "firstname" => "Julia",
      "lastname" => "Lazy",
      "registered" => true,
    ),
  );
}

Obie persony w tym przypadku muszą dziedziczyć po klasie LoadActorUserData. Oczywistym staje się fakt, że każdy rodzaj person będzie miał analogicznie budowaną klasę, po której dziedziczą persony tego samego rodzaju.

Zależności

###Dodawanie Przejdżmy teraz do sedna możliwości naszego TestBundle. Załóżmy, że chcemy dodać do naszych Fixturesów pewne zależności. Robimy to w bardzo prosty sposób. W klasie Fixture A, która jest zależna od klasy Fixture B dodajemy taki oto krótki wpis:

protected $dependentClasses = array(
  B::NAME,
);

Teraz za każdym razem, gdy będziemy próbowali wczytać Fixture A, nasz TestBundle doczyta nam zależny Fixture B.

###Wczytywanie Czas na ostatni krok, jakim jest wczytanie Fixturesów. By móc tego dokonać należy w metodzie kontekstu dodać poniższy kod:

public function mojaMetodaKontekstowa()
{
  $this->loadFixtures(array(
    KLASA_Z_MOIM_PORZADANYM_FIXTUREM::NAME
  ));
  // Dalej robie coś tam z Fixturesami 
  // Dla przykładu:
  $this->getReference('mojaReferencja')->jakasMetoda();
}

统计信息

  • 总下载量: 280
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 12
  • Forks: 7
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2014-02-03

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固