i22/functional-test-bundle

symfony 扩展包,用于与 alice 和 doctrine 扩展包一起进行优化的功能测试

2.0.4 2020-03-09 08:04 UTC

This package is not auto-updated.

Last update: 2024-09-24 19:22:01 UTC


README

A Symfony 扩展包,借助 AliceBundle 简化功能测试。

目录

安装

  1. 下载扩展包
$ composer require --dev i22/functional-test-bundle
  1. 启用扩展包

在 Symfony 3.x 中将扩展包添加到 app/AppKernel.php

<?php
 
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        // ...
        if (in_array($this->getEnvironment(), array('dev', 'test'), true)) {
            // ...
            if ('test' === $this->getEnvironment()) {
                $bundles[] = new I22\FunctionalTestBundle\I22FunctionalTestBundle();
            }
        }

        return $bundles;
    }
    
    // ...
}

在 Symfony 4.x 中将扩展包添加到 config/bundles.php
(应使用自动配置,但激活所有环境)

<?php 
 
return [
    // ...
    I22\FunctionalTestBundle\I22FunctionalTestBundle::class => ['test' => true],
];

基本用法

为每个测试类加载测试文件

您可以通过为您的测试案例定义单独的小测试文件集来替代为所有测试设置一个大的测试文件。

设置您的测试类以扩展 WebTestCase

<?php

use I22\FunctionalTestBundle\Test\WebTestCase;

class MyControllerTest extends WebTestCase
{
    
}

为了自动加载您的自定义测试文件,请在您的测试文件下方放置一个包含测试文件的测试文件夹

.
└── tests/
    ├── ...
    └── Controller/
        └── MyControllerTest/
              ├── fixtures/
              ├   ├── users.yaml 
              ├   ├── ...
              └── MyControllerTest.php

如果您想定义从哪里加载您的测试文件,您可以通过覆盖 getFixtureFilePaths() 方法来指定

  <?php
  
  use I22\FunctionalTestBundle\Test\WebTestCase;
  
  class MyControllerTest extends WebTestCase
  {
      protected function getFixtureFilePaths() : array
      {
          return [
              __DIR__.'/../../global-fixtures/users.yaml',                
          ];
      }
  }

授权用户

如果需要为功能测试授权用户,可以使用 UserAuthorizationTrait 来登录用户。

    <?php
    
    use I22\FunctionalTestBundle\Security\Authorization\UserAuthorizationTrait;
    use I22\FunctionalTestBundle\Test\WebTestCase;
    
    class MyControllerTest extends WebTestCase
    {
        use UserAuthorizationTrait;
        
        public function setUp()
            {
                parent::setUp();
                $user = $this->getDoctrine()->getRepository('App:User')->findOneBy(['email' => 'test@i22.de']);
                $this->login($user);
            }
    }

登录方法假定您的防火墙名为 'default'。在其他情况下,使用登录方法的第二个参数来指定您的防火墙名称。

无翻译器 - 使用翻译键

扩展包在测试环境中自动配置一个 FakeTranslator 作为 @default.translator 服务,因此翻译器将响应原始键,而不是翻译您的翻译键。

对于测试目的,测试键而不是更改翻译是有用的。

如果您想禁用此功能,请按以下方式更改默认配置

#config/packages/test/i22_functional_test.yaml
 
i22_functional_test:
    use_fake_translator: false

禁用表单的自动 Csrf 保护

扩展包自动配置 symfony 表单,禁用表单的自动保护,而不是禁用整个 Csrf 保护服务。这样您仍然可以使用 csrf 令牌管理器生成和验证令牌,但简化了表单提交处理,因为您不需要添加 _token 值

如果您想禁用此功能,请按以下方式更改默认配置

  #config/packages/test/i22_functional_test.yaml
   
  i22_functional_test:
      disable_csrf_form_protection: false