2014-05-01 2 views
2

I 미들웨어로서 여권 보호 API 호출을 가지고 사용자가 어떤 권한이없는 경우테스트 보호 API 호출, 모카 supertest 노드 JS, 여권

server.get('/api/pipes', auth, api.pipes); 

정식 방법은 (401)를 반환한다.

나는 사용자가 loggedin 경우이 시험을 볼 수 있습니다

var postValidLoginCredentials = function(){ 
    return request(url).post('/api/login') 
     .set('Content-Type', 'multipart/form-data') 
     .field('email', '[email protected]') 
     .field('password', 'example') 
    }; 

//This pass passes 
it('should return 200 OK when a user enters a valid user and pass', function(done){ 
    postValidLoginCredentials() 
    .end(function(err, res){ 
    res.should.have.status('200'); 
    done(); 
    }); 
}); 

이 내 테스트 내 보호 API 호출입니다 :

it('should return 200 OK on GET /api/pipes when user is loggedin', function (done) { 
     postValidLoginCredentials() 
     .end(function(err, res){ 
      request(url) 
      .get('/api/pipes') 
      .set('Accept', 'application/json') 
      .expect(200, done); 
     }) 
    }); 

내가 처음 내 로그인을 게시 할 수 있습니다. 로그인 콜백에서 나는 보호 된 API 호출을 호출한다. 그것은 200이어야하지만 나는 401을 얻습니다.이 기능은 내 클라이언트에서 작동하므로 내 테스트에서 뭔가 잘못되었습니다.

또한 함수에서 내 postValidLoginCredentials를 시도했지만 작동하지 않았습니다.

아이디어가 있으십니까?

+0

내 의견을 아래에서 확인할 기회가 있었습니까? – Esteban

+0

당신의 답을위한 Thx. 게시하기 전에 해결책을 찾았습니다. 로그인시 설정된 쿠키를 사용했습니다. 그런 다음 보호 된 경로 호출에서 "get"쿠키를 사용합니다. 나는 이것을하기 위해 낮은 수준의 superagent를 사용했다. 따라서 솔루션이 제대로 작동하는지 확신 할 수 없습니다. – Per

+0

귀하의 의견을 이해할 수 있는지 확실하지 않지만 여권에서 귀하를 대신해서 쿠키를 설정해서는 안됩니다. 아니면 당신은 당신의 테스트만을 수정 했습니까? – Esteban

답변

1

"로컬"로그인 전략을 사용 중이며 쿠키로 세션을 유지 관리한다고 가정합니다.

사용자가 로그인 한 후 인증 된 요청을하는 로그인 한 사용자를 식별 할 방법이 필요합니다.

it('should return 200 OK on GET /api/pipes when user is loggedin', function (done) { 
     postValidLoginCredentials() 
     .end(function(err, res){ 
      request(url) 
      .get('/api/pipes') 
      .set('Accept', 'application/json') 
      .set('Cookie', res.headers['set-cookie']) 
      .expect(200, done); 
     }) 
    }); 

그러나, 그냥 해결 그리고 당신은 대신 supertest의 에이전트 기능을 사용한다 : 쿠키에 세션 ID를 사용하는 경우, 당신은 이런 식으로 할 수 있습니다. README (이 예는 쿠키 저장소에 관한 내용입니다)에서 읽거나 supertest repo에서 tests using it을 읽어보십시오.