2012-04-17 98 views
3

我正在爲依賴連接中持久會話的中間件編寫單元測試。 (即connect-mongo)。針對會話特定中間件的Node.js單元測試

我想創建一個假會話,但似乎無法弄清楚如何。

我在我的瀏覽器中有一個connect.sid cookie,我假設它與某些加密方式中會話集合中的_id相關。

這裏是我的嘗試:

我在cookieParser中間件和會話存儲到服務器添加,然後用下面的請求發送到服務器(複製從Chrome的開發工具面板上的鍵):

var jar = request.jar(), 
    cookie = request.cookie('connect.sid=<REALLYLONGKEY>'); 
jar.add(cookie); 
request({url : 'http://localhost:8585/',jar : jar},this.callback); 

在服務器端正確設置了Cookie,並且驗證了會話正在工作。

但是,從cookie到會話的魔術轉換並沒有像我所希望的那樣發生 - 正確的方法是什麼?

回答

1

如果存在具有該ID的會話,則只能在服務器上設置cookie。誰首先創建了會話?

我可以告訴你我在我的服務器上做了什麼。我想創建模擬客戶端並將請求發送到服務器的測試。我需要一種方法來驗證客戶端。我的服務器允許基於Google OAuth進行身份驗證。但是,我不想經歷教導客戶登錄Google帳戶的麻煩。

我的解決方案是實現另一種方法登錄到我的服務器 - 只使用用戶名。此功能僅在測試期間啓用並禁用生產。我的測試客戶現在可以無問題地登錄。他們在登錄後收到Cookie「connect.sid」,並在隨後的請求中將其發送回服務器。

我也使用request.jar()爲我的請求創建cookie jar。但是,我應該注意到,這隻有在您同時模擬多個客戶端並且需要爲每個客戶端單獨使用一個cookie jar時纔有必要。