Как аутентифицировать запросы Supertest с помощью стратегии Passport / Facebook/?
Я использую паспорт.js для аутентификации (стратегия Facebook) и тестирования с Mocha и Supertest. Как создать сеанс и сделать аутентифицированные запросы с помощью стратегии Supertest for Facebook?
вот пример теста, когда пользователь не вошел в систему:
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)
Спасибо за совет: D
3 ответов
здесь немного разных вещей, поэтому я разделил свой ответ на две части.
1) Сначала вы должны создать тестовых пользователей через Facebook. Вы можете сделать это с помощью одного из двух методов: 1) API Graph Facebook или 2) через страницу ролей вашего приложения.
2) рекомендуемый метод для сохранения сеансов с SuperTest использует вызываемый метод SuperAgent .агент() для сохранения сеансов. Все, что вы можете сделать с SuperAgent, вы можете сделать с Супертест. Смотрите это Github пост для более.
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();
}));
});
});
есть некоторые другие хорошие фрагменты кода на VisionMedia Github. Пожалуйста, найдите их здесь.
общее решение-создать банку cookie, которая будет повторно использоваться между запросами.
следующий пример не является паспортным, но должен работать:
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();
});
});
});
этой пример показывает, как сделать SuperTest часть тестирования:
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();
});
});
здесь блоге об этом.