node.js - 模拟内部依赖
问题描述
我有一个对 Facebook 图形对象具有内部依赖关系的请求,该对象对 FB 图形 API 执行另一个请求。
我想知道是否可以使用 sinon 来模拟图形对象,以便它实际上不会在测试中执行请求,而是会使用我在测试中提供的值执行回调函数。
server.post("/facebookLogin", function(req, res) {
graph.setAccessToken(req.body.fbtoken);
graph.get("me?fields=email", function(err, obj) {
if (!err) {
var email = obj.email;
checkUserAlreadyRegistered(email, function(user) {
if (user) {
return res.send(200, {user:user, token: decorateToken(user.id)});
} else {
return res.send(404);
}
});
} else {
return res.send(500);
}
});
});
解决方案
我遇到了完全相同的问题,并深入研究 fbgraph 源代码,我发现即使它使用“graphql”,内部也是一个带有请求的网络请求,因此您可以使用nock轻松拦截它:
// https://github.com/criso/fbgraph/blob/master/lib/graph.js#L34 <-- fb graph url
const fbMock = nock('https://graph.facebook.com/v4.0/')
.get('/me')
.query(true)
.reply(200, {
id: '123123',
name: 'fb username',
email: 'user@fb.com'
})
it('should not call fb"', (done) => {
chai.request(server)
.post('/facebookLogin')
.send({ fbtoken: 'token_fb' })
.end((err, res) => {
expect(err).to.be.null
expect(res).to.have.status(200)
expect(fbMock).to.have.been.requested
done()
})
}
注意:/v4.0/
根据您的配置,该部分可能会有所不同,但默认值是2.9
,因此请务必使用您使用setVersion方法设置的相同值
推荐阅读
- javascript - jQuery DOMNodeInserted DOMNodeRemoved 不适用于每个元素
- c# - 在父项中设置绑定时,Xamarin.Forms 绑定到自定义控件不起作用
- java - 如何关闭java流序列中的类型提示
- apache-kafka - kafka 国营商店中的当前和最新状态是什么?
- excel - 如何在 VBA excel 中获取合并单元格的范围?
- python - 使用 Python 正则表达式从 .tex 文档中提取文本
- ionic4 - 尝试在android设备上运行时出现离子错误
- grafana - stable/prometheus-operator - 添加持久的 grafana 仪表板
- alfresco - Alfresco Aikau 服务加载错误,为什么没有正确找到或加载服务 javascript 文件?
- ios - 如何保护相同的继承层次结构,例如 MVVM