Escrevendo teste no Drupal 8

Hoje vou mostrar como criar um teste para o seu módulo no Drupal 8.

Para exemplificar, vamos utilizar o seguinte cenário de teste:

Apenas usuários logados com a permissão de "administer site configuration" poderão acessar a seguinte url: 
/custom-tests/powered
Ao acessar essa url, você deverá ver a seguinte mensagem:
"Powered by Drupal 8" 

Antes de começarmos a escrever o teste, vamos criar o módulo com a seguinte funcionalidade descrita acima.

O nome do módulo vai ser "custom_tests".

Crie o arquivo "custom_tests.info.yml":

name: Custom tests
type: module
description: Custom tests module
dependencies:
  - simpletest
core: 8.x
package: Custom

Crie o arquivo "custom_tests.routing.yml":

custom_tests.custom_controller_getcontent:
  path: '/custom-tests/powered'
  defaults:
    _controller: '\Drupal\custom_tests\Controller\CustomController::GetContent'
    _title: 'Powered'
  requirements:
    _permission: 'administer site configuration'

O próximo passo é criar o controller da sua rota.
Crie o diretório "src/Controller" dentro do seu módulo.

Dentro da pasta "Controller", crie o arquivo "CustomController.php":

<?php

namespace Drupal\custom_tests\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Class CustomController.
 *
 * @package Drupal\custom_tests\Controller
 */
class CustomController extends ControllerBase {

  /**
   * Getcontent.
   *
   * @return string
   *   Return Hello string.
   */
  public function GetContent() {
    //Static example message
    return [
      '#type' => 'markup',
      '#markup' => $this->t('Powered by Drupal 8'),
    ];
  }

}

Pronto! Agora com o módulo feito, vamos escrever o nosso teste. 

Dentro da pasta "src", crie uma pasta chamada "Tests", e dentro dela, o arquivo "CustomControllerTest.php": 

<?php

namespace Drupal\custom_tests\Tests;

use Drupal\simpletest\WebTestBase;

/**
 * Provides automated tests for the custom_tests module.
 * @group Custom
 */
class CustomControllerTest extends WebTestBase {

  /**
   * Modules to install.
   *
   * @var array
   */
  public static $modules = array('custom_tests');

  /*
   * CMS name
   */
  private $cms;


  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp();

    //Set default value to CMS
    $this->cms = 'Drupal 8';

    // Cria e loga o usuário
    $user = $this->drupalCreateUser(array('administer site configuration'));
    $this->drupalLogin($user);
  }

  /**
   * Tests custom_tests functionality.
   */
  public function testCustomController() {
    // Acessa a url
    $this->drupalGet('/custom-tests/powered');
   // Verifica se a página está disponível
    $this->assertResponse(200, 'The Powered page is available.');
   // Verifica a mensagem
    $this->assertText('Powered by ' . $this->cms, 'Drupal is the correct!');
 
    $this->drupalLogout();
  }

}

Habilite o módulo "custom_tests" e vamos executar o teste.
Podemos executar o teste via site builder, quanto via command line.

Para executar via site builder, acesse a url: /admin/config/development/testing

Selecione seu teste e clique em "Run tests".

 
Ao terminar de rodar o teste, você terá um relatório completo do resultado, como: tempo de execução, quando testes falharam, um print do passo-a-passo realizado pelo teste, etc.


 
Para executar o teste via command line:

Dentro do docroot do seu projeto, execute o seguinte comando:

php core/scripts/run-tests.sh --browser --verbose --url http://yoursite --class "Drupal\custom_tests\Tests\CustomControllerTest"

Para mais detalhes de como executar os seus testes via command line, consulte aqui a documentação.

Vou deixar aqui o download do módulo junto com o teste escrito.

Espero que tenha ajudado.
Até o próximo tutorial. 

Login do usuário