首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何用sinon来存根require('firebase-admin').auth().getUserByEmail()?

sinon是一个JavaScript的测试框架,用于创建测试替身(test doubles)和存根(stubs),以便在单元测试中模拟和控制函数的行为。在这个问题中,我们想要存根require('firebase-admin').auth().getUserByEmail()函数。

首先,我们需要安装sinon。可以通过在终端中运行以下命令来安装它:

代码语言:txt
复制
npm install sinon --save-dev

接下来,在测试文件中引入sinon:

代码语言:txt
复制
const sinon = require('sinon');

然后,我们可以使用sinon的stub方法来创建一个存根函数。在这个例子中,我们想要存根getUserByEmail函数,它属于firebase-admin.auth()对象。我们可以使用链式调用来创建存根:

代码语言:txt
复制
const admin = require('firebase-admin');

// 创建存根
const getUserByEmailStub = sinon.stub(admin.auth(), 'getUserByEmail');

现在,getUserByEmailStub就是一个存根函数,我们可以使用sinon的API来配置它的行为。例如,我们可以使用returns方法来指定存根函数的返回值:

代码语言:txt
复制
getUserByEmailStub.returns({ uid: 'user123', email: 'example@example.com' });

这样,当调用require('firebase-admin').auth().getUserByEmail()时,存根函数将返回指定的对象。

完成存根后,我们可以在测试中使用它。例如,我们可以编写一个测试用例来验证存根函数是否被调用:

代码语言:txt
复制
// 假设我们有一个名为getUserData的函数,它使用getUserByEmail函数
function getUserData() {
  const email = 'example@example.com';
  return admin.auth().getUserByEmail(email);
}

// 编写测试用例
describe('getUserData', () => {
  it('should call getUserByEmail', () => {
    const getUserByEmailStub = sinon.stub(admin.auth(), 'getUserByEmail');
    getUserData();
    sinon.assert.calledOnce(getUserByEmailStub);
    getUserByEmailStub.restore();
  });
});

在这个测试用例中,我们首先创建了一个存根函数getUserByEmailStub,然后调用getUserData函数。最后,我们使用sinon的assert方法来验证存根函数是否被调用了一次。

这就是使用sinon来存根require('firebase-admin').auth().getUserByEmail()函数的方法。通过使用sinon,我们可以在单元测试中模拟和控制函数的行为,以便更好地测试我们的代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

现在,我们可以使用单元测试提高自己的代码质量。下面,我将自己在使用Jest和Sinon.js配置和编写单元测试中的收获的经验和踩到的坑进行总结,根据从零开始配置和编写单元测试这一条线进行分享。...它能满足日常的普通需求utils工具集的测试,也能够配置Sinon.js进行HTTP模拟测试。...而对于其他的测试框架:Mocha或者Chai等,没有进行具体的了解,因此在这里不多做评价。 如何配置Jest与Sinon.js,从而编写单元测试?...需要使用Sinon.js,我们首先需要进行安装: npm install sinon -D 配置完成后,需要在使用的地方进行引入,如下所示: const sinon = require('sinon')...; 在我的项目中,主要是使用Sinon.js模拟HTTP请求。

3.8K00

分享7个专业级的JavaScript测试库,提高你的工作效率

这些库在各自的领域中都有出色的表现,单元测试、功能测试、模拟、集成测试和突变测试等。通过本文的介绍,我希望你能更深入地了解这些库,找到适合你项目的测试工具。...2、Sinon 这是一个独立的库,用于在JavaScript测试中创建测试替身(侦查、桩和模拟)。它通过提供工具验证函数调用、控制行为等,帮助你编写隔离的测试。...https://github.com/cucumber/cucumber-js 使用示例 Cucumber是一种行为驱动开发(BDD)的工具,它允许开发者用简洁的、近乎自然语言的文本语句(英语)描述应用程序的行为...例如,你可以使用td.function()创建一个模拟函数: const td = require('testdouble'); // 创建一个模拟函数 const mockFunction = td.function...,例如使用td.object()创建一个模拟对象: const td = require('testdouble'); // 创建一个模拟对象 const mockObject = td.object

30320
  • 15 个常见的 Node.js 面试问题及答案

    Node.js 是异步的、事件驱动的、非阻塞的和单线程的,使得它成为开发下面应用程序的完美候选: 实时应用程序,聊天和提供实时更新的应用程序 将视频或其他多媒体内容流式传输给大量观众的流式应用程序 其他...I/O 密集型应用程序,协作平台 遵循微服务架构的网络后端 然而,Node.js 的特性使得它对于其他类型的应用程序来说不是一个理想的选择。...执行 CPU 密集型任务的应用程序(复杂的数学计算)在使用 CPU 时表现不佳,因为 Node.js 是单线程的。...在 Node.js 中,我们使用像 Sinon 这样的库实现(译者注,Sinon 在测试中替换某部分代码,减少测试项编写的复杂度 https://sinonjs.org)。 14....通过校验和验证包的完整性提供更好的安全性,保证在某个系统上运行的包在任何其他系统中的工作方式完全相同,这就是为什么选择 yarn 而不是 npm 进行包管理。

    1.8K20

    【Node.js】1430- 15 个常见的 Node.js 面试问题及答案

    Node.js 是异步的、事件驱动的、非阻塞的和单线程的,使得它成为开发下面应用程序的完美候选: 实时应用程序,聊天和提供实时更新的应用程序 将视频或其他多媒体内容流式传输给大量观众的流式应用程序 其他...I/O 密集型应用程序,协作平台 遵循微服务架构的网络后端 然而,Node.js 的特性使得它对于其他类型的应用程序来说不是一个理想的选择。...执行 CPU 密集型任务的应用程序(复杂的数学计算)在使用 CPU 时表现不佳,因为 Node.js 是单线程的。...在 Node.js 中,我们使用像 Sinon 这样的库实现(译者注,Sinon 在测试中替换某部分代码,减少测试项编写的复杂度 https://sinonjs.org)。 14....通过校验和验证包的完整性提供更好的安全性,保证在某个系统上运行的包在任何其他系统中的工作方式完全相同,这就是为什么选择 yarn 而不是 npm 进行包管理。

    1.8K20

    Node.js-具有示例API的基于角色的授权教程

    在用户控制器中使用它限制对“获取所有用户”和“按ID获取用户”路由的访问。...const config = require('config.json'); const jwt = require('jsonwebtoken'); const Role = require('_helpers...它允许管理员用户访问任何用户记录,但仅允许普通用户访问自己的记录。 Express是api使用的Web服务器,它是Node.js最受欢迎的Web应用程序框架之一。...重要说明:api使用“"secret”属性签名和验证用于身份验证的JWT令牌,并使用您自己的随机字符串对其进行更新,以确保没有其他人可以生成JWT获得对应用程序的未授权访问。...require('rootpath')(); const express = require('express'); const app = express(); const cors = require

    5.7K10

    Laravel Api实现JWT Token认证

    需要我们自己去实现,并且Laravel框架默认提供的身份认证不是jwt的,需要在数据库中增加api_token字段,记录用户认证token并进行身份校验,如果需要使用jwt,无需添加字段,需要借助三方库实现...传统的做法中,服务器会保存生成的 token, 当客户端发送来 token 时,与服务器的进行比对,但是 jwt 的不需要在服务器保存任何 token, 而是使用一套加密 / 解密算法 和 一个密钥 对用户发来的...这样一,服务器就不再保存任何用户授权的信息了,也就解决了 session 曾出现的问题....实现方法 1.安装 jwt-auth composer require tymon/jwt-auth:dev-develop 参考文档: https://github.com/tymondesigns/...php namespace App\Models; use Tymon\JWTAuth\Contracts\JWTSubject; use Illuminate\Foundation\Auth\User

    69620

    Apache Web服务器安全配置全攻略

    mod_auth_db和mod_auth_dbm模块则分别将用户信息(名称、组属和口令等)存于Berkeley-DB及DBM型的小型数据库中,便于管理及提高应用效率。   ...mod_auth_digest模块则采用MD5数字签名的方式进行用户的认证,但它相应的需要客户端的支持。   ...SSL(Secure Socket Lager),被Apache所支持的安全套接字层协议,提供Internet上安全交易服务,电子商务中的一项安全措施。通过对通讯字节流的加密防止敏感信息的泄漏。...:   Require group staff   Require group staff admin   Require user adminuser   指定了一个组...还可以根据需要利用db格式(mod_auth_db)的数据文件,或者直接利用数据库,:mSQL(mod_auth_msql)或DBI兼容的数据库(mod_auth_dbi)。

    1.5K20

    常见登录认证 DEMO

    basic auth basic auth 是最简单的一种,将用户名和密码通过 form 表单提交的方式在 Http 的 Authorization 字段设置好并发送给后端验证 要点: 不要通过 form...ajax 客户端注意设置 Authorization 字段的值为 'Basic xxx',通过该 Http 字段传递用户名密码 base64 的方法在客户端要注意兼容性 btoa ,建议使用现成的库...= ctx.request.body if (auth.username === 'fdsa', auth.password === 'fdsa') { // session cookie...验证的用户名和密码属于明文传输,需要 https ctx.cookies.set('auth', auth.username) // 没有设置过期时间,属于Session Cookie...header部分和payload部分只是经过了base64的编码,并未加密,不能在载荷部分保存涉及安全的东西 JWT 令牌通常通过 HTTP 的 Authorization: Bearer 传输

    2.8K10
    领券