2011-10-04 26 views
5

Tôi chạy thử nghiệm đơn vị của mình thông qua dòng lệnh và hoạt động tốt.LÀM THẾ NÀO để đơn vị thử nghiệm các biến phiên trong PHP?

Nhưng vấn đề ở đây là khi tôi thử nghiệm một chức năng có chứa mã mà đọc một biến session, tôi nhận được một giá trị null ..

tôi đoán là bạn không thể truy cập các biến session khi bạn đang không ở trong một trình duyệt. .

Tôi có thể làm điều này với PHP bằng cách nào? Điều này có khả thi không?

Bằng cách Im sử dụng CodeIgniter 1.7.2 và CIUnit v0.17

gợi ý Bất kỳ hoặc nhận xét sẽ là một trợ giúp lớn cho tôi ..

Cảm ơn

+0

Tôi muốn truy cập dữ liệu phiên trong một lớp chuyên dụng và giả định rằng trong các thử nghiệm. – Phil

+0

Các phiên CI là các cookie vô hiệu, vì vậy, chúng hoạt động trong các trình duyệt –

+0

Cảm ơn Phil và Damien đã trả lời .. @Phil Làm cách nào để tôi làm điều đó? Vì vậy, xin lỗi im hoàn toàn noob về điều này .. Tôi có thể yêu cầu một ví dụ hoặc thủ tục nếu nó ok với bạn .. thx –

Trả lời

8

tôi sử dụng một lớp cho phiên như Phil gợi ý. Nếu bạn gọi session_start() theo cách thủ công, bạn sẽ ràng buộc mã của mình với việc thực thi phiên PHP. Cuộc gọi của tôi để session_start được bảo vệ bởi lớp phiên của tôi với những điều sau đây:

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.'); 
    } 
    } 

Edit:

Đoạn mã trên sẽ đi vào lớp phiên của bạn (và có lẽ được gọi một cách nào đó bởi constructor của nó). Dòng lệnh PHP tạo một mảng thay vì gọi session_start (không hoạt động trên dòng lệnh).

Khi kiểm tra mã mà dựa vào biến session tôi nhạo báng các biến session trong thử nghiệm của tôi:

$_SESSION = array('key1' => 'value you want', 'key2' => 'etc.'); 

Điều này cho phép bạn kiểm tra tất cả các thiết lập phiên có thể bạn sẽ nhận được trên trang.

Kiểm tra xem các giá trị phiên được tạo thuộc về mã tạo chúng theo ý kiến ​​của tôi hay không, vì vậy việc chế nhạo sự tồn tại của chúng có vẻ ổn với tôi. Bằng cách này, bạn đang thử nghiệm từng đơn vị riêng biệt hơn là kết hợp chúng và giữ giá trị phiên giữa các thử nghiệm.

+0

Cảm ơn Paul đã trả lời. Điều này có nghĩa là tôi sẽ làm cho lớp học của riêng tôi? Làm thế nào tôi có thể truy cập các biến phiên đã tồn tại? vì Im nhận giá trị null khi ở dòng lệnh, nhưng có được giá trị đúng khi trong trình duyệt. thử nghiệm đơn vị của tôi được chạy qua dòng lệnh. –

+0

Tôi sẽ điền vào câu trả lời của tôi với những chi tiết đó. – Paul

+0

thnks rất nhiều ... –

Các vấn đề liên quan