Как запустить супертест в аутентифицированных конечных точках, сгенерированных генератором полного стека angular

Я пытаюсь использовать супертест для проверки поведения аутентифицированной точки входа, которую я сделал, используя полный стек yeoman angular генератор. Я попытался использовать простую аутентификацию, как описано в документации по супертестам, но все равно получаю ошибку 404.

Конечная точка и тест настроены следующим образом:

сервер/апи/вещь/index.js

'use strict';
var express = require('express');
var auth = require('../../auth/auth.service');

var controller = require('./thing.controller');
var router = express.Router();
router.get('/', auth.isAuthenticated(), controller.index);
module.exports = router;

fullstack-demo/server/api/thing/thing.spec.js

'use strict';

var should = require('should');
var app = require('../../app');
var request = require('supertest');
var User = require('./user.model');

describe('GET /api/things', function() {
  before(function(done) {
    //Create user for testing
    var user = new User({
      provider: 'local',
      name: 'Fake User',
      email: '[email protected]',
      password: 'test'
    });
    user.save(function(){done()});
  });

  it('should respond with JSON array', function(done) {
    request(app)
      .get('/api/things')
      .auth('[email protected]', 'test')
      .expect(200)
      .expect('Content-Type', /json/)
      .end(function(err, res) {
        if (err) return done(err);
        res.body.should.be.instanceof(Array);
        done();
      });
  });
});

Любые идеи о том, как проверить эту конечную точку?

Я думаю, что ошибки могут быть связаны с тем, что я использую Passport для аутентификации, есть ли способ аутентифицировать супертест против Passport?


person Javier Castellanos    schedule 18.05.2015    source источник


Ответы (1)


Решение найдено! Мне просто нужно было указать путь токена аутентификации к аутентифицированной конечной точке.

var server = request.agent('http://localhost:9000');
var token = null
describe('GET /api/things', function() {

  before(function(done){

    User.find({}).remove(function() {
      User.create({
        provider: 'local',
        name: 'Test User',
        email: '[email protected]',
        password: 'test'
      }, {
        provider: 'local',
        role: 'admin',
        name: 'Admin',
        email: '[email protected]',
        password: 'admin'
      }, function() {
          console.log('finished populating users');
          server.post('/auth/local')
            .send({email:'[email protected]', password:'test'})
            .expect(302)
            .end(function(err, res){
              console.error('ERROR ' + JSON.stringify(err));
              console.log('BODY ' + JSON.stringify(res.body));
              token = res.body.token;
              done();
            })
        }
      );
    });



  });

  it('should respond with JSON array', function(done) {
    server.get('/api/things')
      .set('Authorization', 'Bearer '  + token)
      .expect(200)
      .expect('Content-Type', /json/)
      .end(function(err, res) {
        if (err) return done(err);
        res.body.should.be.instanceof(Array);
        done();
      });
  });
});
person Javier Castellanos    schedule 18.05.2015