私はCodeIgniter MVCフレームワークで構築されたPHP Webアプリケーションを持っています。さまざまなコントローラークラスをテストしたい。ユニットテストにToastを使用しています。私のコントローラには状態はなく、処理するものはすべてセッションに保存されるか、表示するために渡されます。擬似セッションオブジェクトを作成し、それが正しく動作するかどうかをテストするのは簡単です(擬似オブジェクトを作成し、$ controller-> session = $ mockで注入するだけです)。CodeIgniterでコントローラをテストするには?
私が知りませんが、どのようにビューを操作するかです。私はしかし、私はモックローダを作成し、元のを置き換えることができ、CIのコードを変更する必要はありませんので
$this->load->view($view_name, $vars, $return);
:CodeIgniterのでは、ビューは次のようにロードされます。そしてここに問題があります。私はCI_Loaderから新しいクラスを派生させる方法を見つけることができません。
私はシステム/ライブラリ/ Loader.phpファイルが含まれていない場合は、クラスCI_Loaderが定義されていないと私はそれを継承することはできません。
class Loader_mock extends CI_Loader
私は(のrequire_onceを使用して)ファイルを含める場合、私はエラーを取得する:
Cannot redeclare class CI_Loader
は、それ自体が何らかの理由からのrequire_onceを使用していないCIコードのように見えます。
ここで誰もCodeIgniterで動くアプリケーションをテストした経験がありますか?
編集:私はモッククラスに実行時に実際のローダオブジェクトを注入し、__call、__set、__get、__issetと__unset持つすべての呼び出しと変数をリダイレクトしようとしました。しかし、それは動作していないようです(私はエラーは発生しません。出力はありません。Toastの空白ページ)。コードは次のとおりです。
class Loader_mock
{
public $real_loader;
public $varijable = array();
public function Loader_mock($real)
{
$this->real_loader = $real;
}
public function __call($name, $arguments)
{
return $this->real_loader->$name($arguments);
}
public function __set($name, $value)
{
return $this->real_loader->$name = $value;
}
public function __isset($name)
{
return isset($this->real_loader->$name);
}
public function __unset($name)
{
unset($this->loader->$name);
}
public function __get($name)
{
return $this->real_loader->$name;
}
public function view($view, $vars = array(), $return = FALSE)
{
$varijable = $vars;
}
}
いいアイデア、ありがとう。 –