Node.js 如何使用mocha通过Passport Google OAuth身份验证测试Express REST API?
我正在构建一个应用程序,作为其中的一部分,我在Express上有一个RESTAPI,我想为它编写集成测试。我使用“mocha”和“chai-http”来实现这一点,除了添加身份验证之外,这一切都很好。所以在这样的测试中:Node.js 如何使用mocha通过Passport Google OAuth身份验证测试Express REST API?,node.js,api,tdd,mocha.js,passport.js,Node.js,Api,Tdd,Mocha.js,Passport.js,我正在构建一个应用程序,作为其中的一部分,我在Express上有一个RESTAPI,我想为它编写集成测试。我使用“mocha”和“chai-http”来实现这一点,除了添加身份验证之外,这一切都很好。所以在这样的测试中: process.env.NODE_ENV = 'development' let chai = require('chai') let chaiHttp = require('chai-http') let should = chai.should() var server
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()
})
})
})
})
我将收到一个错误,因为我的请求不会来自经过身份验证的会话。我使用“passport”和Google OAuth策略,因此我无法向登录页面发送post请求,也无法想出登录或验证请求的方法。(数据库操作是续集)。如何测试应用程序中的API操作?是否有标准方法?我发现的问题的唯一解决方案是使用模拟passport身份验证策略进行测试,如下所示:
当您在测试环境中时,请使用该策略。自创建此帖子以来,您是否有幸找到解决方案?@vapurrmaid是的,我已经添加了一个答案。