私はいくつかの単体テストを書いていますが、私はまだ単体テストに慣れていません。
私が抱えている問題は、保存の多くが
からのユーザー IDを必要とする動作を呼び出すことYii::app()->user->id
です。
ただし、UnitTest を実行すると、ユーザーがログインしていないため、問題が発生します。
フラグ(例:)で動作を無視するかif ($isInTestingMode)
、テストクラス内でユーザーをログインさせることができますか?
おそらく、テストで使用するユーザー オブジェクトを作成するでしょう。そして、適切なテストで (setup
アーニーがコメントで説明しているように、メソッドの一部として)、テスト ユーザー オブジェクトをスワップします。
テスト ユーザー オブジェクトには、次のように機能するメソッドがあります。
public function getId() {
return 12;
}
public function getIsGuest() {
return false;
}
上記は、彼らが「フェイク」オブジェクトと呼んでいるものです。
セットアップ方法では、次の行を使用します。
Yii::app()->configure(array(
'components' => array(
'user' => array(
'class' => 'path.to.FakeUser',
)
)
));
それをデフォルトのユーザーにしたい場合は、それをテスト構成ファイルに追加することもできます(そして、CWebUser/WebUser
ログインしていないユーザーが必要なテストで通常のモデルを交換します.
または、各単体テストで FakeUser (isLoggedIn = true/false) にフラグを設定することもできます。私はおそらくこのオプションを自分で使用するでしょう...