INTERNO
composer require --dev proklung/bitrix-phpunit-testing-tools
Um pacote que usa este pacote como dependência deve ter uma seção em compositor.json (o módulo de migração precisa ser instalado onde precisa estar):
"extra" : {
"installer-paths" : {
"vendor/sheerockoff/bitrix-ci/files/bitrix/modules/{$name}/" : [ " type:bitrix-module " ]
}
}
A classe base para testes é BitrixableTestCase
. Inicia o Bitrix anexado ao pacote e permite usar sua API em testes.
Os parâmetros de acesso ao banco de dados são definidos no método setupDatabaseData
da classe base BitrixableTestCase
.
Se o banco de dados não existir no momento do lançamento, ele será criado.
Padrão:
protected function setupDatabaseData () : void
{
putenv ( ' MYSQL_HOST=localhost ' );
putenv ( ' MYSQL_DATABASE=bitrix_ci ' );
putenv ( ' MYSQL_USER=root ' );
putenv ( ' MYSQL_PASSWORD= ' );
}
Pode ser substituído em cada teste específico.
Instruções para redefinir o banco de dados antes de cada teste e carregar um novo.
Redefina o banco de dados e carregue um dump de banco de dados personalizado.
O caminho para o dump é especificado no método getDumpPath
do teste:
protected function getDumpPath () : string
{
return $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /Tests/dump/dump.sql ' ;
}
Eficaz apenas em combinação com ResetDatabaseTrait
.
Ao usar despejos de batalha, geralmente surgem problemas com a expiração da licença. Neste caso, você deve substituir manualmente o arquivo include.php
em vendor/sheerockoff/bitrix-ci/files/bitrix/modules/main
.
Usando migrações de módulo sprint.option.
O caminho para o diretório com migrações é especificado no método getPathSprintMigrations
do teste:
protected function getPathSprintMigrations () : string
{
return __DIR__ . ' ../../../../../../Tests/sprint_migrations/ ' ;
}
Devido às peculiaridades de usar o assembly Bitrix CI, você deve instalar o módulo com astúcia - diretamente dentro do pacote assembly (na pasta vendor/sheerockoff/bitrix-ci/files/bitrix/modules/sprint.option
) no estágio de composição . Um efeito colateral é que se o próprio assembly for atualizado, o módulo de migração irá por água abaixo.
Até agora, sim.
Periodicamente, o banco de dados expira devido à sua data de expiração (“...a versão de teste expirou...”). Para corrigir isso, você precisa executar qualquer teste com a característica ResetDatabaseTrait
, que recria o banco de dados novamente.
Instrua para executar migrações antes de cada teste.
Sob o capô está uma versão simplificada do pacote, portanto, migrações dele também são adequadas. Com uma exceção - a migração não herda da classe ArrilotBitrixMigrationsBaseMigrationsBitrixMigration
, mas de ArrilotBitrixMigrationsForkBaseMigrationsBitrixMigration
.
O caminho para o diretório com migrações é especificado no método getMigrationsDir
do teste:
protected function getMigrationsDir () : string
{
return __DIR__ . ' /../migrations ' ;
}
A característica vem com um método auxiliar makeMigration
para criar migrações de modelos.
protected function makeMigration( string $ name , string $ template ) : void
Modelos disponíveis:
Nome | Descrição | Aliases |
---|---|---|
`padrão` | Limpar modelo padrão | |
`add_iblock_type` | Adicionando um tipo de infoblock | |
`add_iblock` | Adicionando um bloco de informações | |
`add_iblock_element_property` | Adicionando uma propriedade a um infoblock | `add_iblock_prop`, `add_iblock_element_prop`, `add_element_prop`, `add_element_property` |
`adicionar_uf` | Adicionando propriedades UF | |
`consulta` | Solicitação arbitrária ao banco de dados por meio da API d7 | |
`adicionar_tabela` | Criando uma tabela por meio da API d7 | `criar_tabela` |
`excluir_tabela` | Excluindo uma tabela via API d7 | `drop_table` |
Característica adicional - CSVTrait
para importação de arquivos CSV (formato de exportação Bitrix) em migrações.
Uma vez habilitado, o teste deve implementar os seguintes métodos:
getIblockCode()
- código do infobloco;getImportDefinitionSections()
- definição de subseções. Um array com o número de colunas do arquivo CSV (IC_GROUP0, etc.);getImportDefinitionProperties()
– definição de propriedades. Matriz no formato [código da propriedade => número da coluna em CSV];getCsvPath()
– caminho para o arquivo CSV;Importante! - o arquivo CSV não deve ter a primeira linha com nomes de colunas.
Do pacote. Redesenhado para necessidades privadas.
Para ajudar a testar o código do componente, use a classe ProklBitrixTestingToolsInvokersComponentInvoker
Métodos de classe:
__constructor($componentObject)
- inicialização do objeto de lançamento do componente;init()
- inicialização;setParams($params)
- define parâmetros para iniciar o componente em teste;setArParams($params)
- define arParams para executar o componente em teste;setName(string $name)
- define o nome do componente("test.component");setTemplate($template)
- define o componente template("test.component");execute()
- lança o componente para execução (o template não é usado);getResultValue($name)
- retorna o parâmetro $arResult pela chave $name;getArResult()
- retorna o $arResult completo da operação do componente;getArResultCached()
- retorna a parte armazenada em cache (via $this->__component) de $arResult após a execução do componente;getExecuteResult()
– retorna o resultado da operação do componente quando o operador return
é usado no código do componente.Exemplo:
// ...
/**
* @label component
* @test
*/
public function useComponentInvoker () {
/** @var CBitrixComponent $componentObject */
$ component = new Prokl BitrixTestingTools Invokers ComponentInvoker ( $ componentObject );
$ component -> init ();
$ component -> setParams ( array ( " id " => 10 ));
$ component -> execute ();
$ this -> getAssert ()-> equal ( $ component -> getResultValue ( " id " ), 10 , " Результат не верен " );
}
Você pode testar o result_modifier de um modelo de componente usando um objeto da classe ProklBitrixTestingToolsInvokersResultModifierInvoker
.
Métodos:
__construct($componentName, $template)
- inicialização do objeto, os parâmetros são iguais aos parâmetros do método CMain::IncludeComponent()
;setArResult($arResult)
- configurando artificialmente o resultado a ser enviado ao adaptador;setArParams($params)
- define arParams para executar o componente em teste;execute()
- inicia o adaptador para execução;getArResult()
– retorna o $arResult
completo da operação do adaptador;getArResultCached()
- retorna a parte armazenada em cache (via $this->__component) de $arResult após a execução do componente;getArResultValue($name)
- o valor do resultado do adaptador usando a chave $name
;Exemplo:
/**
* @label component
* @test
*/
public function modifierForSomeTemplate () {
$ rm = new Prokl BitrixTestingTools Invokers ResultModifierInvoker ( " project:test.with.class " , " list " );
$ rm -> setArResult ( array ( " id " => 10 ));
$ rm -> execute ();
$ this -> getAssert ()-> equal ( $ rm -> getArResultValue ( " id " ), 10 , " Параметры не равны " );
}
ProklBitrixTestingToolsInvokersEventInvoker
facilita o teste do processamento de eventos.
Métodos:
__construct($module, $eventName)
- inicialização do objeto gatilho do evento, $module - nome do módulo de emissão do evento, $eventName - nome do evento;setExecuteParams($params)
- configurando os parâmetros do evento na forma de um array, que será passado para os parâmetros do evento;execute()
- lançamento do evento;countOfHandlers()
– obtendo o número de manipuladores de eventos;getEvent()
– obtendo um objeto de evento;Exemplo:
// ...
/**
* @test
*/
public function handlersOfEventExist () {
$ eventInvoker = new Prokl BitrixTestingTools Invokers EventInvoker ( " main " , " OnPageStart " );
$ eventInvoker -> setExecuteParams ( array (
" IBLOCK_ID " => 12
));
$ eventInvoker -> execute ();
$ this -> getAssert ()-> asTrue ( $ eventInvoker -> countOfHandlers () > 1 );
}
goTo
da classe BitrixableTestCase
. Emula estar em um URL. Expõe tudo relacionado à URL no núcleo antigo e no D7.Ele também substitui automaticamente tudo o que é possível de superglobais como $_SERVER, $_POST, etc.
$ _GET [ ' test ' ] = ' OK ' ;
$ this -> goTo ( ' /test/ ' );
$ url = $ APPLICATION -> GetCurPage (); // $url = '/test/index.php'
$ request = Application:: getInstance ()-> getContext ()-> getRequest ();
$ uriString = $ request -> getRequestUri (); // $uriString = '/test/'
$ testGetParam = $ request -> getQuery ( ' test ' ); // $testGetParam = 'OK'