微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为箭头函数内部的逻辑正确创建单元测试

如何解决如何为箭头函数内部的逻辑正确创建单元测试

我正在使用 HapiJS 开发现有的 NodeJS Web 服务,Hapi Lab 与 Sinon 一起进行测试。该服务使用 massjs 连接到 Postgres 数据库。有一种方法是由其他人实现的,它没有单元测试。现在我正在重用这个方法,我想为它实现一些单元测试。 该方法在其中执行一个 massjs 事务,持久化到多个表中。

async createSomething(payload) {

    const { code,member } = payload;

    const foundCompany = await this.rawDb.ethnics.tenants.findOne({ code });

    if (foundCompany && foundCompany.companyId) {

        const { companyId } = foundCompany;
        const { foreignId } = member;

        return await this.rawDb.withTransaction(async (tx) => {

            const foundMember = await tx.ethnics.members.findOne({ foreign_id: foreignId,company_id: companyId });

            if (!foundMember) {

                //some business logic...
                const newMember = await tx.ethnics.members.insert(member);
                //more business logic persisting to other tables...
                return newMember;
            }
        });
    }
}

问题是,我不知道如何只在箭头函数内部存根,而不存根整个箭头函数。我只想存根 tx 的调用。我也不想使用数据库,而是存根 rawDb 属性。从单元测试的角度来看,这可行吗?

解决方法

是的,这是可行的。有两种选择:

  1. 直接存根 MassiveJS 方法。

存根大量方法的示例findOne

const massive = require('massive');
const sinon = require('sinon');

// Stub massive.Readable class method findOne.
// You need to find where is the real method findOne and stub it.
const stub = sinon.stub(massive.Readable,'findOne');
// You can resolve it.
stub.resolves();
// Or you can throw it.
stub.throws(new Error('xxx'));
  1. 在内存中使用 pg 进行测试。

仅出于测试目的,您可以使用以下模块:test-pg-poolpg-mem。测试前启动测试pg,测试结束后销毁。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?