2013-12-17 25 views
6

Używam Passport.js do uwierzytelniania (strategia Facebooka) i testowania z Mocha i Supertest. Jak mogę utworzyć sesję i tworzyć uwierzytelnione żądania za pomocą strategii Supertest for Facebook?Jak uwierzytelniać najdroższe żądania za pomocą strategii Passport/Facebook /?

Oto test przykład, gdy użytkownik nie jest zarejestrowany:

describe 'when user not logged in', -> 

    describe 'POST /api/posts', -> 
     it 'respond with 401', (done)-> 
     request(app). 
      post(API.url('posts')). 
      set('Accept', 'application/json'). 
      send(post: data). 
      expect('Content-Type', /json/). 
      expect(401, done) 

Dziękuję za radę: D

Odpowiedz

12

Istnieje kilka różnych rzeczy tutaj to wygląda, więc mam moją odpowiedź podzielony na dwie części.

1) Najpierw musisz utworzyć użytkowników testowych za pośrednictwem Facebooka. Możesz to zrobić za pomocą jednej z dwóch metod: 1) Graficznego interfejsu API Facebooka lub 2) Poprzez stronę Role twojej aplikacji.

2) Zalecaną metodą utrzymywania sesji za pomocą SuperTest jest użycie metody SuperAgent o nazwie .agent() w celu utrwalenia sesji. Wszystko, co możesz zrobić z SuperAgent, możesz zrobić dzięki SuperTest. Zobacz ten post Github, aby uzyskać więcej.

var supertest = require('supertest'); 
var app = require('../lib/your_app_location'); 

describe('when user not logged in', function() { 
    describe('POST /api/posts', function() { 
     var agent1 = supertest.agent(app); 

     agent1 
      .post(API.url('posts')) 
      .set('Accept', 'application/json') 
      .send(post: data) 
      .(end(function(err, res) { 
       should.not.exist(err); 
       res.should.have.status(401); 
       should.exist(res.headers['set-cookie']); 
       done(); 
      })); 
    }); 
}); 

Na VisionMedia Github znajduje się kilka innych dobrych fragmentów kodu. Proszę je znaleźć here.

+0

Dziękuję. Twoja odpowiedź pomogła mi dużo: D – Zeck

+0

Czy możesz pokazać przykład uwierzytelniania za pomocą Facebooka? tj. w jaki sposób przeprowadzasz logowanie? Czuję, że może czegoś brakuje. – Kilizo

2

Ogólnym rozwiązaniem jest stworzenie jar, które zostaną ponownie wykorzystane między żądaniami .

Poniższy przykład paszport nie jest specyficzny, ale powinno działać:

var request = require('request'); 

describe('POST /api/posts', function() { 
    // Create a new cookie jar 
    var j = request.jar(); 
    var requestWithCookie = request.defaults({jar: j}), 

    // Authenticate, thus setting the cookie in the cookie jar 
    before(function(done) { 
     requestWithCookie.post('http://localhost/user', {user: 'foo', password: 'bar'}, done); 
    }); 

    it('should get the user profile', function (done) { 
     requestWithCookie.get('http://localhost/user', function (err, res, user) { 
      assert.equal(user.login, 'foo'); 
      done(); 
     }); 
    }); 
}); 
+0

Czy to rozwiązanie dla lokalnej strategii? lub Podstawowe uwierzytelnianie? –

0

Ten example pokazuje jak zrobić SuperTest część badania:

describe('request', function() { 
    describe('persistent agent', function() { 
    var agent1 = request.agent(); 
    var agent2 = request.agent(); 
    var agent3 = request.agent(); 
    var agent4 = request.agent(); 

    it('should gain a session on POST', function(done) { 
     agent3 
     .post('http://localhost:4000/signin') 
     .end(function(err, res) { 
      should.not.exist(err); 
      res.should.have.status(200); 
      should.not.exist(res.headers['set-cookie']); 
      res.text.should.include('dashboard'); 
      done(); 
     }); 
    }); 

Oto blog post o nim.