node.js - 如何在角度全栈生成器生成的经过身份验证的端点中运行 super 测试

标签 node.js express passport.js supertest angular-fullstack

我正在尝试使用 supertest 来测试我使用 yeoman angular full stack generator 创建的经过身份验证的 enpoint 的行为。我尝试使用 supertests 文档中描述的简单例份验证,但仍然收到 404 错误。

端点和测试按以下方式配置:

服务器/api/thing/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: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="186c7d6b6c586c7d6b6c367b7775" rel="noreferrer noopener nofollow">[email protected]</a>',
      password: 'test'
    });
    user.save(function(){done()});
  });

  it('should respond with JSON array', function(done) {
    request(app)
      .get('/api/things')
      .auth('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fc88998f88bc88998f88d29f9391" rel="noreferrer noopener nofollow">[email protected]</a>', '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 进行 super 测试身份验证?

最佳答案

找到解决方案了!我只需要将身份验证 token 路由到经过身份验证的端点。

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: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="790d1c0a0d390d1c0a0d571a1614" rel="noreferrer noopener nofollow">[email protected]</a>',
        password: 'test'
      }, {
        provider: 'local',
        role: 'admin',
        name: 'Admin',
        email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d3b2b7bebabd93b2b7bebabdfdb0bcbe" rel="noreferrer noopener nofollow">[email protected]</a>',
        password: 'admin'
      }, function() {
          console.log('finished populating users');
          server.post('/auth/local')
            .send({email:'<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="acd8c9dfd8ecd8c9dfd882cfc3c1" rel="noreferrer noopener nofollow">[email protected]</a>', 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();
      });
  });
});

关于node.js - 如何在角度全栈生成器生成的经过身份验证的端点中运行 super 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30310679/

相关文章:

node.js - AWS Lambda 复制对象 "Process exited before completing request"

javascript - 如何允许用户在 Node JS Passport JS 失败后尝试使用不同的电子邮件?

node.js - 在作为 firebase 函数运行的 express 应用程序中获取完整的 url——包括函数名称?

node.js - Express/Heroku - 在服务器 Web 应用程序而不是客户端 Web 应用程序上设置 Cookie

node.js - 如何使用 passport-spotify 将用户重定向回上一页

node.js - JWT token 发行和 Passport w/node js

javascript - 如何仅使用 uglifyjs 缩小文件?

javascript - 如何使用 puppeteer 查找网页上的所有资源?

javascript - 使用快速验证器验证 req.params

node.js - Passport isAuthenticated() 总是返回 TRUE