n-educatio/testbundle

该包的最新版本(2.3.1)没有可用的许可证信息。

示例规格和端到端测试框架

2.3.1 2014-01-27 14:27 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:00:32 UTC


README

该包优化了Symfonowskiego加载 fixtures 的机制。该包完全独立,并且100%覆盖单元测试。此外,TestBundle 引入了新的规则,即使用所谓的“句柄”来引用页面上的特定元素。

Build Status

安装

修改 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"
    }
}

然后安装缺失的 vendors

php composer.phar install

运行 TestBundle 包的测试

ant test - phpunit 和 behat 测试

fixtures 使用示例

示例可在此查看 此处

句柄使用示例

语言更改测试示例

上下文

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);
  }
}

在我们的例子中,PageObject 可以是页面上的任何元素,例如菜单、语言面板等。需要注意的是 $proofSelector 字段,它告知 PageObject 的作用范围。

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

注意,get() 方法现在获取的是 id 句柄,它必须在 html 中作为 t_uchwyt 固定。

分人/等

我们的目标是只加载启动测试所需的特定 fixtures,因此每个 fixtures 都被声明为具体的“人”、“课程”、“评论”等,它们具有独特的属性和属性。例如,在我们的系统中存在两个测试用户:Julia Lazy(已在该服务中注册的 persona)和 Amy Fresh(尚未与应用程序关联,但拥有自己的电子邮件地址、名称等。我们创建它们的方式如下:我们的 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,
    ),
  );
}

以及 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,
    ),
  );
}

在这种情况下,这两个 persona 都必须继承自 LoadActorUserData 类。显然,每种类型的 persona 都将有一个类似构建的类,该类是该类型 persona 的继承类。

依赖

###添加现在让我们来看看 TestBundle 的核心功能。假设我们想在 fixtures 中添加某些依赖关系。我们以非常简单的方式做到这一点。在依赖于类 Fixture B 的类 Fixture A 中添加以下简短条目

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

现在,每次我们尝试加载 Fixture A 时,TestBundle 都会读取依赖的 Fixture B。

###加载现在是最后一步,即加载 fixtures。为了做到这一点,需要在上下文方法中添加以下代码

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