Pergunta

Eu estou escrevendo testes para o meu projeto atual, feito com Zend Framework. Está tudo bem, mas eu tenho um problema testando os registrados ações que os usuários / controladores: Eu preciso estar conectado para ser capaz de executar a ação / controlador

.

Como posso estar conectado PHPUnit?

Foi útil?

Solução

Como você está dizendo que quer acções / controladores de teste, acho que você não está escrevendo unidade-testes, mas testes de integração / funcional -. Ou seja, trabalhando com Zend_Test e testar através da MVC

Aqui está uma função de teste eu usei em um projeto, onde eu estou testando se o log in é OK:

public function testLoggingInShouldBeOk()
{
    $this->dispatch('/login/login');
    $csrf = $this->_getLoginFormCSRF();
    $this->resetResponse();
    $this->request->setPost(array(
        'login' => 'LOGIN',
        'password' => 'PASSWORD',
        'csrfLogin' => $csrf,
        'ok' => 'Login',
    ));
    $this->request->setMethod('POST');
    $this->dispatch('/login/login');
    $this->assertRedirectTo('/');
    $this->assertTrue(Zend_Auth::getInstance()->hasIdentity());
}

Simplesmente:. Eu estou carregando o formulário de login, extrair o token CSRF, preencher o formulário e publicá-la

Então, eu posso testar se estou conectado.


Com isso, você provavelmente pode extrair o log-in parte, para chamá-lo antes de cada um dos seus testes que requerem um usuário válido para iniciar sessão.

Outras dicas

Não há outra maneira. Na minha entidade User Eu tenho um método login() que coloca o ID do usuário para a sessão e uma variável estática. O que acabei de fazer no setUp() teste é chamada $user->login() e ele funciona. Ao testar sessões de ambiente não são utilizados (configuração Zend_Session::$isUnitTested = true tem esse efeito) e testes de contar com a variável estática. Basta lembrar de limpar a variável estática (logout() o usuário) em tearDown().

Eu acho que este artigo pode ajudá-lo: http://perevodik.net/en/posts/7/ Ele descreve como para criar uma identidade falsa que você pode usar para definir o ambiente para um estado equivalente a um usuário logado.

Da mesma maneira Pascal está usando esta função:

$this->_getLoginFormCSRF();

Eu criei uma função genérica que retorna o valor de carregar o formulário usando o gerenciador de forma elemento:

função pública _getCSRFHashValueFromForm ($ formAlias, $ csrfName) { $ Form = $ this-> servicemanager-> get ( 'FormElementManager') -> get ($ formAlias); retornar $ form-> get ($ csrfName) -> getValue (); }

Isto naturalmente pressupõe que o CSRF está ligado à forma e não dentro de qualquer conjunto de campos, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top