Как протестировать через браузер консольное приложение Yii

В большинстве случаев я создаю консольное приложение на Yii для запуска задач по cron. Это очень удобно, ничего лишнего. Но вот беда, тестировать такие приложения сложновато. Если идти по пути контроллеров и их методов, то тут все просто, вызываем точно также, как и обычный скрипт. Меняем лишь точку входа.

К примеру если раньше заходили на сайт

http://site.ru/index.php?r=site/login

то для консольного приложения создается отдельная точка входа. Все остальное же не меняется

http://site.ru/cron.php?r=site/cron

Но прелесть консольных приложений Yii в командах. Для каждой команды создается отдельный файл в папке protected/commands с именем {Commandname}Command.php

 

А в нем 

<?php
class SiteCommand extends CConsoleCommand {
    public function run($args) {
	// тут то, что необходимо выполнить по этой команде
    }
}

вот тут возникает проблема. Как вызвать эту команду в браузере, для того, чтобы протестировать ее дееспособность.

Когда мы вызываем ее через cron мы делаем к примеру так

php /path/cron.php site

 где site это параметр и название нужной нам команды. Не ищите ее в $_GET или $_POST. Откуда же Yii узнает откуда ему брать название команды?

 

Уверяю Вас, тут нет никакого волшебства. Все команды лежат тут

 $_SERVER['argv'] = array(0=>'{путь до cron.php}',1=>'site' ...);

так что если хотите эмулировать выполнение команды через браузер, то просто заполните эти переменные.

 

Я делаю примерно так

if( isset($_GET['c']) and !empty($_GET['c'])){
	$_SERVER['argv'] = array(0=>'{путь до cron.php}',1=>'site');
	$_SERVER['argc'] = 2;
}

А потом уже вызываю так

http://site.ru/cron.php?с=site

Может быть я не достаточно внимательно читал документацию, но решения я так и не нашел. Так, что если Вы напишите в комментах, как это делать грамотно, то буду весьма признателен.

 

 

 

Рассказать друзьям

Добавить комментарий


Защитный код
Обновить

Комментарии   

0
PtaXa
# PtaXa 26.11.2013 18:19
Вот рабочий пример запуска консольных приложений из браузера

http://www.yiiframework.com/wiki/226/run-yiic-directly-from-your-app-without-a-shell/
0
Leroy
# Leroy 26.11.2013 19:04
ну мой вариант более простой и удобный. Кроме-того приложение запускается точно также как и под кроном