Teste unitário para simular o loop

4

Como você constrói testes de unidade com o PHPUnit e a estrutura de teste do WordPress que simula estar no loop? Por exemplo, se eu quiser testar uma função que só possa ser chamada no loop porque presume que os dados do post estão configurados apropriadamente para a consulta principal, como eu construiria esse teste de unidade?

    
por philosophyguy 01.03.2016 / 18:32

3 respostas

1

A chave para isso é o método go_to da classe WP_UnitTestCase que você deve estender. Ele simula a análise de um URL em relação à raiz do wordpress (IIRC). Pode ser necessário primeiro definir postagens e outras informações e, em seguida, chamar go_to para acionar o loop.

    
por Mark Kaplun 01.03.2016 / 18:45
1

Supondo que você esteja usando o WP_UnitTestCase, tente isso dentro de sua classe de teste:

private $post_id;

// use the factory to create a post with some fake data
public function setUp() {
    parent::setUp();

    $this->post_id = $this->factory()->post->create( 
        array ( 'post_content' => 'Here are some words. <img src="image.jpg"> <!--more--> And here are some more' ) 
    );

}

public function test_a_thing() { 

    // fake going to the URL
    $this->go_to( get_permalink( $this->post_id ) );

    // make sure your relevant globals are set
    global $post;
    setup_postdata($post);

    // profit
    $yourthing->function_you_test();
}
    
por piersb 23.08.2016 / 13:55
0

As funções do plug-in de teste de unidade no Wordpress são extremamente difíceis. Geralmente é mais fácil fazer um teste funcional ou de aceitação. A diferença é que, em um teste de unidade, você tem que zombar de tudo que você interage. Em um teste funcional, você pode executar todo o sistema. Por exemplo, eu uso o Codeception para iniciar um navegador e testar o sistema inteiro. As opiniões variam, mas acho que todo o conceito de teste unitário de um plugin WP é maluco. O plugin não existe no vácuo. É um sistema que interage com outro sistema. Qual é o ponto de tentar isolar? BTW - Quase nenhum desenvolvedor realmente testa dessa maneira. O estado das estruturas de testes do WP é SORRY.

    
por Jim Maguire 19.06.2016 / 03:22