我通過命令行運行我的單元測試,它工作正常。如何在PHP中單元測試會話變量?
但這裏的問題是,當我測試包含讀會話變量代碼的函數,我得到一個null值..
我的猜測是,你不能訪問會話變量時,你是不是在瀏覽器中。 。
我該怎麼用PHP做這件事? 這可能嗎?
通過使用笨1.7.2 IM的方式CIUnit v0.17
任何建議或評論將是對我很大的幫助..
感謝
我通過命令行運行我的單元測試,它工作正常。如何在PHP中單元測試會話變量?
但這裏的問題是,當我測試包含讀會話變量代碼的函數,我得到一個null值..
我的猜測是,你不能訪問會話變量時,你是不是在瀏覽器中。 。
我該怎麼用PHP做這件事? 這可能嗎?
通過使用笨1.7.2 IM的方式CIUnit v0.17
任何建議或評論將是對我很大的幫助..
感謝
我使用一個類的菲爾建議的會議。如果手動調用session_start(),則會將代碼綁定到PHP會話實現。我要在session_start調用是由我的會話類以下的保護:
if (!isset($_SESSION))
{
// If we are run from the command line interface then we do not care
// about headers sent using the session_start.
if (PHP_SAPI === 'cli')
{
$_SESSION = array();
}
elseif (!headers_sent())
{
if (!session_start())
{
throw new Exception(__METHOD__ . 'session_start failed.');
}
}
else
{
throw new Exception(
__METHOD__ . 'Session started after headers sent.');
}
}
編輯:
上面的代碼將進入您的會話類(也可能是被它的構造以某種方式調用)。命令行PHP創建一個數組而不是調用session_start(這在命令行上不起作用)。
當測試代碼依賴於會話變量我嘲笑會話變量在我的測試:
$_SESSION = array('key1' => 'value you want', 'key2' => 'etc.');
這允許您測試您將收到頁面上的所有可能的會話設置。
測試會話值是否創建屬於創建它們的代碼,因此嘲笑它們的存在對我來說似乎沒問題。通過這種方式,您可以單獨測試每個單元,而不是將它們組合起來,並在測試之間保持會話值。
感謝保羅的答覆。這是否意味着我會自己創建會話課程?我如何訪問已經存在的會話變量?因爲Im在命令行中獲得空值,但在瀏覽器中獲取正確的值。我的單元測試是通過命令行運行的。 –
我會用這些細節填寫我的答案。 – Paul
非常... –
我會將會話數據訪問包裝在一個專門的類中,並在測試中模擬。 – Phil
CI會話是事實上的餅乾,所以是的,他們在瀏覽器中工作 –
感謝Phil和Damien的回覆.. @Phil我該怎麼做?所以對不起我完全noob這個..我可以問一個例子或程序,如果它可以與你.. thx –