NodeJS/Passport -使用mocha和superagent测试用户登录

NodeJS/Passport - Testing user login with mocha and superagent

本文关键字:superagent 测试 用户 登录 mocha Passport 使用 NodeJS      更新时间:2023-09-26

我已经用基本的MEAN堆栈构建了一个登录过程,并使用护照进行身份验证过程。

我正试图设置一个测试,以确保登录过程是工作的。下面是我使用的登录部分代码:

  it ('login', function(done) {
    agent.post(config.web.vhost + '/login')
      .send({ email: 'bruce@wayne.inc', password: 'batman' })
      .end(function(err, res) {
      if (err) console.log('error' + err.message);
        res.should.have.status(200);
        done();
      });
  });

我得到以下错误:

没有错误电子邮件:bruce@wayne.inc․没有错误socket挂起․双调!

  1 passing (2s)
  1 failing
  1) User login:
     Uncaught TypeError: Cannot read property 'should' of undefined

我知道我的路线和证书是好的,但我不知道什么不工作在这里。这是我用户测试的第一步,所以我可能没有得到正确的东西。

下面是我测试的其余部分:

var should = require("should");
var mongoose = require('mongoose');
var request = require('superagent');
var agent = request.agent();
var config = require("../settings/conf");
var dbUrl = require("../config/database.js");
var User = require('../server/models/user');
var db;
describe('User', function() {
before(function(done) {
  db = mongoose.connect(dbUrl.url);
    done();
  });
  after(function(done) {
     mongoose.connection.close()
    done();
  });
  beforeEach(function(done) {
    var user = new User({
      email: 'bruce@wayne.inc',
      password: 'batman',
      firstName: 'Bruce',
      lastName: 'Wayne'
    });
    user.save(function(err, user) {
      if (err) console.log('error' + err.message);
      else console.log('no error');
      done();
    });
  });
  it('find a user by username', function(done) {
    User.findOne({ email: 'bruce@wayne.inc' }, function(err, user) {
      user.email.should.eql('bruce@wayne.inc');
      console.log("   email: ", user.email)
      done();
    });
  });
  it ('login', function(done) {
    agent.post(config.web.vhost + '/login')
      .send({ email: 'bruce@wayne.inc', password: 'batman' })
      .end(function(err, res) {
      if (err) console.log('error' + err.message);
        res.should.have.status(200);
        done();
      });
  });
  afterEach(function(done) {
    User.remove({ email: 'bruce@wayne.inc' }, function() {
      done();
    });
  });
});

我注意到您看到的失败是connect ECONNREFUSED—所以这不是关于passport的任何事情,只是您没有成功连接到agent.post中的服务器。

我猜你的config.web.vhost值没有正确设置,或者不是superagent正在寻找的正确形式(例如,superagent可能需要一个完整的绝对url,前面有'http://',而你的vhost值可能只是主机名)。