gpt4 book ai didi

node.js - 在集成测试中模拟不同的 Passport.js 策略

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:33 25 4
gpt4 key购买 nike

/config/passport.js 文件中,我定义并使用了不同的策略:

var
sails = require('sails'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
CustomStrategy = require('passport-custom').Strategy,
GoogleStrategy = require('passport-google-oauth').OAuth2Strategy,
FacebookStrategy = require('passport-facebook').Strategy;

passport.use(new LocalStrategy({...}, function(email, password, done){...}));

passport.use('my-custom-strategy', new CustomStrategy(function (req, done){...}));

... same for FB and Google

我想做一个集成测试,我模拟从这些策略返回到 Controller 的结果(并专注于 Controller 的其余部分和服务处理)。具体来说,模拟 custom-strategy 对我来说很重要。

我可以找到一些稀有的例子,例如 this postfollowup link ,但无法与我的用例有太多联系。

任何人都可以给我一些代码示例,我可以从中开始构建测试吗?

var expect = require('chai').expect
, request = require('supertest')
, sinon = require('sinon')
, passport = require('passport');

describe('/auth', function () {
it('should return correct authentication response with tokens', function (done) {
// here I want to mock the custom strategy (or any other)

var requestBody = {
// some info
};

request(url)
.post('/auth')
.send(requestBody)
.end(function (err, res) {
if (err) {
return done(err);
}

console.log(res.body);

done();
});
});
});

最佳答案

从你的问题来看,我不清楚你到底想模拟什么函数。

我会在这里解释两个问题场景:

要么你想模拟身份验证本身,例如依赖经过身份验证的用户来测试 API Controller 。对于这种情况,提供的链接是一种可能的方法。只需编写另一个身份验证机制来伪造登录用户即可。模拟策略不会像真实策略那样遍历所有代码,而只会执行最少需要完成的操作。如果需要的话,也许还可以操作数据库。如果您的问题不更具体,那么这里没有什么可添加的。

另一种情况是您想要测试策略本身。所以你想模拟你的策略所依赖的外部 I/O。这可以是用户输入/http 流量和/或数据库交互。由于用户输入通常是使用 http 流量在服务器上收集的,并且许多策略使用外部服务器进行身份验证,因此我建议按照您需要的方式模拟实际的 http 流量来测试您的策略。您可以使用 nock 来执行此操作。对于数据库交互,您可以设置测试数据库。

关于node.js - 在集成测试中模拟不同的 Passport.js 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36501655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com