Bug(バグ) #3852
Youichi Kimura がほぼ8年前に更新
h3. Overview (現象)
MemberConfigTable クラスには MemberConfig をキャッシュするための @MemberConfigTable::$results@ が用意されおり、多くのコードはこのキャッシュがリクエストごとに初期化される前提で実装されているが、機能テスト時には @MemberConfigTable::$results@ のキャッシュがリクエストを跨いで引き継がれてしまうため、テスト時のみ発生する意図しない動作の原因となっている。
h3. Causes (原因)
MemberConfigTable クラスには MemberConfig をキャッシュするための @MemberConfigTable::$results@ が用意されているが、通常のブラウザからのアクセスによって OpenPNE が動作する場合はリクエスト毎にこのキャッシュは破棄される。
しかし機能テストで使用する opBrowser では、リクエストごとに sfContext の初期化は行うものの静的変数の初期化は行われないため MemberConfigTable のインスタンス(@Doctrine_Core::getTable()@ によって生成されるシングルトン)は残ったままとなり、@MemberConfigTable::$results@ も初期化されない。 によって生成されるシングルトン)は残ったままとなる。
h3. Way to fix (修正内容)
opBrowser がリクエストを実行する度(sfContext を生成するタイミング)に @MemberConfigTable::$results@ の中身を空にする
MemberConfigTable クラスには MemberConfig をキャッシュするための @MemberConfigTable::$results@ が用意されおり、多くのコードはこのキャッシュがリクエストごとに初期化される前提で実装されているが、機能テスト時には @MemberConfigTable::$results@ のキャッシュがリクエストを跨いで引き継がれてしまうため、テスト時のみ発生する意図しない動作の原因となっている。
h3. Causes (原因)
MemberConfigTable クラスには MemberConfig をキャッシュするための @MemberConfigTable::$results@ が用意されているが、通常のブラウザからのアクセスによって OpenPNE が動作する場合はリクエスト毎にこのキャッシュは破棄される。
しかし機能テストで使用する opBrowser では、リクエストごとに sfContext の初期化は行うものの静的変数の初期化は行われないため MemberConfigTable のインスタンス(@Doctrine_Core::getTable()@ によって生成されるシングルトン)は残ったままとなり、@MemberConfigTable::$results@ も初期化されない。 によって生成されるシングルトン)は残ったままとなる。
h3. Way to fix (修正内容)
opBrowser がリクエストを実行する度(sfContext を生成するタイミング)に @MemberConfigTable::$results@ の中身を空にする