当前位置: 首页 > 知识库问答 >
问题:

如何存根EntityManager和连接在TypeORM与开玩笑

张建树
2023-03-14

我在NestJS上用Typescript开发了一个应用程序,使用TypeORM和用Jest编写的单元测试。我有一个使用如下事务的函数:

async createMany(users: User[]) {
  await this.connection.transaction(async manager => {
    await manager.save(users[0]);
    await manager.save(users[1]);
  });
}

这是NestJS文档中的一个示例。我通过this以大致相同的方式完成。联系事务,但业务逻辑不同。

问题是我想做一个单元测试来测试这个服务功能。所以我需要以某种方式模拟这两个。连接及其管理器。或者至少是经理。我不知道如何用笑话来表达。我无法创建没有连接的管理器。我无法在没有管理器返回的情况下创建模拟连接。

在NestJS中,同时使用TypeORM和Jest是标准的。必须有一种使用事务编写单元测试的方法。但我不知道怎么做。

注意,我询问的是单元测试模拟ORM。不是直接使用测试db实例的集成测试。

共有2个答案

牧业
2023-03-14

我相信你也可以:

import { getConnectionToken } from '@nestjs/typeorm';

{
  provide: getConnectionToken(),
  useClass: Connection,
},
拓拔富
2023-03-14

您需要使用模拟的连接创建一个测试模块。像这样的事情:

import { Test } from "@nestjs/testing";

describe("UsersService", () => {
    let usersService;
    let connection;
    const mockConnection = () => ({
        transaction: jest.fn()
    });

    beforeEach(async () => {
        const module = await Test.createTestingModule({
            providers: [
                UsersService,
                {
                    provide: Connection,
                    useFactory: mockConnection
                }
            ],
        }).compile();

        usersService = await module.get<UsersService>(UsersService); 
        connection = await modle.get<Connection>(Connection);
    });

    describe("some tests", () => {
        it("should test something", async () => {
            const someMockedUsers = [/* some users */];
            const mockedManager = {
                save: jest.fn()
            }
            connection.transaction.mockImplementation((cb) => {
                cb(mockedManager);
            });

            await userService.createMany(someMockedUsers);

            expect(connection.transaction).toHaveBeenCalled();
            expect(mockedManager.save).toHaveBeenCalledTimes(2);
            // ...

        });
    });


});

 类似资料:
  • 来自维基百科: 从那以后,Connect Four已经用蛮力方法解决了,从John Tromp编译8层数据库的工作开始[4][8](1995年2月4日)。能够强力解决Connect Four的人工智能算法是最小最大值或负最大值,其优化包括alpha-beta修剪,游戏玩家移动的动态历史排序和换位表。使用这些方法求解连接四的代码也是 Fhourstones 整数性能基准测试的基础。 我一直在试图加快

  • 问题内容: 我正在使用node.js和socket.io构建一个小型原型。一切运行正常,我面临的唯一问题是我的node.js连接将断开连接,并且我被迫刷新页面以重新建立连接并重新运行。 有一种方法可以在断开事件触发后立即重新建立连接? 据我所知,这是一个普遍的问题。因此,我正在寻找解决该问题的最佳实践方法:) 非常感谢,丹 问题答案: 编辑:Socket.io已内置支持现在 当我使用socket.

  • 目前,我正在努力连接并在f#中针对本地azure表存储(开发存储)执行操作。 我能找到的唯一与存储Auth连接的方法。StorageCredentials(accountName,accountKey)似乎不接受我在C#解析方法中使用的developmentstorage=true字符串。 我尝试使用相应的帐户名和密钥(devstoreaccount1,eby 8 VDM 02 xnoqflquw

  • 问题内容: 我有这个反应 在这种情况下,如何测试axios?开玩笑说那里有一个异步代码的用例,在那里他们使用了模拟功能,但是我不知道我是否可以用axios做到这一点?参考:https : //facebook.github.io/jest/docs/tutorial- async.html 到目前为止,我已经测试了它是否返回了正确的类型 我不知道如何传递模拟数据并测试它是否返回,但是有人有任何想法

  • 我需要帮助,在理解JSF连接Java类文件的方式。在我当前进入的项目中,它使用类对象将JSF与Java类连接起来。但我不知道对象在哪里初始化。在Struts中,我们通过Struts.xml将JSP与action连接起来。但是在这里我没有看到任何映射,它只是使用 这里的是一个对象,而不是类名。 我的问题是这个如何精确地连接到classname? 除了冬眠,我只是一个星期以上的经验。请帮我把你所有的东

  • 如何完全断开本地Git存储库与所有远程分支的连接? 我从github克隆了一个Git存储库。com,但后来它被删除了,我不希望Git报告任何需要“推送”的更改。我试过用谷歌搜索这个,但我认为我的术语是错误的,我什么也找不到。 我可以简单地从我的列表中删除和部分吗。git/config文件,还是会破坏我的本地存储库?