Pergunta

Estou tentando usar SimpleTest com CodeIgniter, usando código fornecido por Maroonbytes.Estou usando LAMP e NetBeans 6.9.

A página test.php é carregada no meu navegador.Eu tenho um teste stub em vigor e ele aparece nas seleções suspensas.Quando tento executá-lo, recebo 2 erros de PHP:

Mensagem:include_once(/var/www/sparts3/main/tests/basic_test_v.php):não foi possível abrir o stream:Não existe tal arquivo ou diretório

Mensagem:include_once():Abertura com falha '/var/www/sparts3/main/tests/basic_test_v.php' para inclusão (include_path = '.:/Usr/share/php:/usr/share/pêra')

O caminho está errado - básico_test_v.php está em uma subpasta /testes/visualizações.

O depurador aponta para isso em teste.php:

function add_test($file, &$test)

Por alguma razão, o NetBeans não expõe o valor de $file neste momento.Isso significa que está vazio?

Já alterei uma linha de código porque ela me fez passar por uma página de código 404 não encontrada.parecia que o depurador GET estava causando falha no validador.Então adicionei um critério, do meu jeito ignorante (tenho certeza que deveria ser uma exceção tratada ou algo assim):

if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START')
    {   ...  }

Como posso resolver isso?BTW, isso é uma tentativa de resolver minha outra postagem, que irei atualizar;parecia melhor fazer desta uma pergunta discreta.


ATUALIZAÇÃO 1: Tenho usado o suplemento Web Developer (Firefox) para experimentar as entradas POST.Acredito que eles estão sendo maltratados no código.Ainda parece que o NetBeans está hesitando em mostrar algumas variáveis ​​de string durante a depuração;isso é frustrante.

ATUALIZAÇÃO 2: Parece-me que o processamento de código válido para no mesmo ponto que o NetBeans para de exibir variáveis.estou passando teste.php.Estou no meio de uma função, add_test($arquivo, &$teste).Esta função abre com uma instrução if;isso termina bem e posso ver as variáveis.Em seguida, uma nova instrução if:

if (file_exists($implementation))
{
    require_once ($implementation); ...

Assim que estou nessa linha, duas coisas acontecem:

  1. As variáveis ​​exibidas em NetBeans ficam em branco, exceto para superglobals
  2. O código se comporta como se$implementação é uma variável vazia

Eu adicionei uma declaração logo acima destas linhas:

$implementation = 'http://var/www/sparts3/main/tests/views/basic_test_view.php';

Isso não muda nada.A saída do navegador é a mesma, esteja eu usando o NetBeans/Xdebug ou não.

Então está começando a parecer uma falha no processamento do PHP.Isso existe?Posso tentar fazer upload e tentar a partir do serviço host - apenas para obter pistas de diagnóstico, e desanimado, porque CI sem capacidade de depuração não me interessa.


ATUALIZAÇÃO 3: Eu tentei de tudo em um PC WAMP.Os mesmos resultados do navegador (além de alguns erros "obsoletos", algo a ver com PHP 4 vs.5).Acho que posso depurar nesse PC (se o Xdebug estiver funcionando), mas parece que não faz sentido.

Foi útil?

Solução

Você renomeou basic_test_v.php para basic_test_view.php?o código espera que seus arquivos sejam nomeados e armazenados corretamente.

ATUALIZAÇÃO 1 (sim, estou entediado)

Já Jimmied uma linha de código, porque isso me deixa além de uma página do código 404 não encontrada.Parecia que o depurador estava fazendo com que o validador falhasse.Então, adicionei um critério, da minha maneira ignorante (tenho certeza de que deve ser uma exceção de manuseio ou algo assim):

if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START') {   ...  }

Como posso resolver isso?BTW, isso é tentado para resolver meu outro post, que vou atualizar;Parecia melhor fazer desta uma pergunta discreta.

A solução "certa" para este problema é:definir $config['uri_protocol'] = "AUTO"; para $config['uri_protocol'] = "PATH_INFO";e $config['enable_query_strings'] = FALSE; para $config['enable_query_strings'] = TRUE;no config.php (leia o comentário acima dessas configurações, elas são muito úteis)

Depois de uma análise mais aprofundada em test.php, posso dizer que seus arquivos de teste devem ser nomeados assim:

%name%_%type%_test.php (onde %type% é singular)

para deixar mais claro aqui um exemplo:

Temos um controlador bem -vindo no arquivo bem -vindo.php O teste para este controlador deve ser nomeado controlador_de boas-vindas_test.php e armazenado em testes/controladores/

o script test.php tenta carregar o arquivo de teste e o arquivo testado automaticamente.Mas na minha opinião isso precisa ser corrigido.

Alterei a função get_loader_id e add_test como segue

function get_loader_id($file, $type) {
   $loader_id = str_replace("_{$type}_test.php", "", basename($file));
   return $loader_id;
}
function add_test($file, &$test) {
   $implementation = '';
   if (preg_match('/_controller/', $file)) {
      $controller = get_loader_id($file, 'controller');
      $implementation = APPLICATION . 'controllers/' . $controller . '.php';
   } elseif (preg_match('/_model/', $file)) {
      $model = get_loader_id($file, 'model');
      $implementation = APPLICATION . 'models/' . $model . '_model.php';
   } elseif (preg_match('/_view/', $file)) {
      $view = get_loader_id($file, 'view');
      $implementation = APPLICATION . 'views/' . $view . '.php';
   } elseif (preg_match('/_helper/', $file)) {
      $helper = get_loader_id($file, 'helper');
      $implementation = APPLICATION . 'helpers/' . $helper . '.php';
   } elseif (preg_match('/_library/', $file)) {
      $library = get_loader_id($file, 'library');
      $implementation = APPLICATION . 'libraries/' . $library . '.php';
   }
   if (file_exists($implementation)) {
      require_once ($implementation);
   }
   $test->addFile($file);
}

Se você está seguindo as convenções do nome do arquivo, tudo deve funcionar bem (eu o testei em um MacBook com o Zend Server CE, XDebug, SimpleTest e NetBeans 6.9)

Outras dicas

Se o que você está tentando carregar é uma visualização, você tentou usar $this->load->view('basic_test_view'); ?

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