2012-09-05 5 views
0

sessionId가 주어지면, 나는 익스프레스 세션 객체를 가질 필요가있다. 그런 다음이 세션 개체를 편집하여 세션 저장소의 세션을 자동으로 업데이트하도록 할 수 있습니다. ?이 테스트를 실행할 때빠른 세션 다시 만들기?

Session = require('express').session.Session; 

_testSession: (sStore, sId) -> 
    console.log 'called _testSession with session id: ' + sId 

    sStore.get sId, (error, session) -> 
    expressSession = new Session 
     sessionId: sId 
     sessionStore: sStore 
     , session 
    expressSession.foo = 17 

    console.log 'set expressSession.foo to: ' + expressSession.foo 

    setTimeout (()-> 
     sStore.get sId, (error, session) -> 
      console.log 'foo = ' + session.foo 
     ), 1000 

그러나, 나는 다음과 같은 출력을 얻을 :

called _testSession with session id: YaFLcq3eSvoNuwnLS1T1ntrC.3UJMuQ5So6lYRWLDgIRx4Vk/Ab1qH65zV9IwMqoMcR8 
set expressSession.foo to: 17 
foo = undefined 

사람이 여기에 무슨 일이 일어나고 있는지 어떤 생각을 가지고 있습니까을 ... :(

=== = EDIT ====

코드를 읽을 수 있도록 save()도 호출 해 보았습니다.

console.log 'set expressSession.foo to: ' + expressSession.foo 

expressSession.save (error) -> 
    console.log 'error: ' + error 
    setTimeout (()-> 
     sStore.get sId, (error, session) -> 
      console.log 'foo = ' + session.foo 
     ), 1000 

그리고 같은 출력 :(

==== 편집 ====

신경 끄시 고, 저장을 얻었다는() 작동합니다. sessionId는 sessionID .../facepalm이어야합니다.

+0

"자동으로 업데이트"한다는 의미입니까? Session 개체의 save 메서드를 호출하지 않아도됩니까? http : //www.senchalabs.org/connect/session.html – robkuz

+0

내 게시물을 업데이트했습니다. 슬프게도 save()를 호출하면 도움이되지 않았습니다. ( – user1161657

+0

Nvm, sessionId는 sessionID 여야합니다. – user1161657

답변

1

@robertj가 말했듯이 저장하라는 지시가 없으면 객체를 저장하지 못할 것입니다.

하지만 더 중요한 것은 세션 개체 자체 (즉, 세션에 대한 연결의 미들웨어)를 테스트하려는 경우가 아니라면 현재 수행중인 작업에 아무런 의미가 없다는 것입니다.

더 많은 컨텍스트가 없으면 말하기 어렵지만, 여기에있는 귀하의 목적은 어떤 경로 처리기 나 미들웨어가 세션에 무엇인가를 넣을 것이라고 기대합니다. 그렇다면 그냥 격리시켜 테스트하십시오. 예 :

var should = require('should'); 

var req = { session : {}, /*any other bits of req you expect your handler to need */}; 
var res = { /* whatever functions your handler needs off the response */ }; 

yourHandler(req, res); 
req.session.foo.should.be.ok; // not null; alternatively test equality or whatever 

'단위 테스트'용입니다. 통합 테스트를하고 있다면 (예 : db와 view와 같은 일들을 함께보고 싶다면), 세션을 점검 할 필요가 없다면, 그 결과를 확인해야합니다.

+0

사실, 저의 목표는 socket.io를 사용할 때 내 세션 객체를 사용하는 것이 었습니다. – user1161657

+0

아마도 그 질문을해야 할 것입니다. 그것의 예는 이미 : http://www.danielbaulig.de/socket-ioexpress/ – Paul

+0

실제로 소켓 정보를 검색하기 위해 참조한 것입니다. 슬프게도이 부분에 여전히 붙어 있습니다. – user1161657