node.js - 如何使用 Mocha 测试带有 Passport Google OAuth 身份验证的 Express REST API?

标签 node.js api tdd mocha.js passport.js

我正在构建一个应用程序,作为其中的一部分,我在 Express 上有一个 REST API,我想为其编写集成测试。我使用“mocha”和“chai-http”来执行此操作,除了添加身份验证之外,一切都运行良好。所以在这样的测试中:

process.env.NODE_ENV = 'development'

let chai = require('chai')
let chaiHttp = require('chai-http')
let should = chai.should()
var server = require('../app.js')
var schemas = require('../schemas')
var Snippet = schemas.Snippet
chai.use(require('chai-passport-strategy'))

chai.use(chaiHttp)

describe('Snippet', () => {
  beforeEach((done) => {
    Snippet.destroy({
      where: {}
    }).then(function () {
      done()
    }).catch(function (e) {
      done(e)
    })
  })
  describe('snippet create', () => {
    it('it should store a snippet ', (done) => {
      let snippet = {
        title: 'Test',
        description: 'Mock description',
        snippet: 'Mock body',
        keywords: 'Test key, words;input',
        type: 'sql',
        rating: 1,
        approved: false
      }
      chai.request(server)
        .post('/api/submitSnippet/')
        .send(snippet)
        .end((err, res) => {
          if (err) console.log(err)
          res.should.have.status(200)
          res.body.should.be.a('object')
          res.body.should.have.property('title')
          res.body.should.have.property('description')
          res.body.should.have.property('snippet')
          res.body.should.have.property('keywords')
          res.body.should.have.property('type')
          res.body.should.have.property('rating')
          res.body.should.have.property('approved')
          res.body.title.should.equal('Test')
          res.body.description.should.equal('Mock description')
          res.body.snippet.should.equal('Mock body')
          res.body.keywords.should.equal(['Test', 'key', 'words', 'input'])
          res.body.type.should.equal('sql')
          res.body.rating.should.equal(1)
          res.body.approved.should.equal(false)
          done()
        })
    })
  })
})

我会收到错误,因为我的请求不是来自经过身份验证的 session 。我正在使用“passport”和 Google OAuth 策略,因此我无法向登录页面发送发布请求,并且我无法想出登录或验证我的请求的方法。 (数据库操作是Sequelize)。如何测试应用程序中的API操作?有标准方法吗?

最佳答案

我发现的问题的唯一解决方案是使用模拟 Passport 身份验证策略进行测试,如下所示: https://www.npmjs.com/package/passport-mocked 当您处于测试环境中时,请使用它来代替您的策略。

关于node.js - 如何使用 Mocha 测试带有 Passport Google OAuth 身份验证的 Express REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42213494/

相关文章:

c# - 将 OpenXML 创建的 Excel 电子表格导出到客户端

git - 有没有办法在一个 git 分支上运行测试,同时在另一个分支上工作?

node.js - Express.js/Mongoose 用户角色和权限

node.js - 当不存在 Waterline 关联时 Sails 服务返回 MongoDb 结果,但当它们存在时失败

java - 如何在 Java 中使用 REST-assured 上传 CSV 文件?

c# - 如何在不同的测试数据存储格式之间进行选择?

unit-testing - 您如何使用 TDD 设计复杂系统?

javascript - 实时多人游戏-区域广播

node.js - Docker无法连接到同一网络上的链接容器-所有其他容器都在工作

javascript - jqGrid发送编辑/删除内联信息序列化JSON格式