SimpleTest com CodeIgniter — não identifica arquivo — variáveis morrem?
-
29-09-2020 - |
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:
- As variáveis exibidas em NetBeans ficam em branco, exceto para superglobals
- 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.
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');
?