【问题标题】:Unit testing mirkoORM entities单元测试 mirkoORM 实体
【发布时间】:2021-12-23 17:13:12
【问题描述】:

我正在尝试对 MikroORM 实体中的方法进行单元测试,从而使用测试数据填充 mikroORM collection 字段。 (我开玩笑):

describe('Team Tests', () => {
    it('isLeader should return true when given user is the team leader', () => {
       // Given
        const team = new Team('Test team');
        const user = new User('Test User', 'test@test.fr');

        team.members.add(new TeamMember(user, TeamRole.Leader));

        // When
        const result = team.isLeader(user.userId);

        // Then
        expect(result).toBe(true);
    });
});

但是,当我运行测试时,将数据添加到集合时遇到以下错误:

Cannot read properties of undefined (reading 'properties')
TypeError: Cannot read properties of undefined (reading 'properties')
    at Collection.get property [as property] (C:\Users\arsen\git\HorizonWeb\api\node_modules\@mikro-orm\core\entity\ArrayCollection.js:123:44)
    at Collection.validateItemType (C:\Users\arsen\git\HorizonWeb\api\node_modules\@mikro-orm\core\entity\Collection.js:317:71)
    at C:\Users\arsen\git\HorizonWeb\api\node_modules\@mikro-orm\core\entity\Collection.js:111:40
    at Array.forEach (<anonymous>)
    at Collection.add (C:\Users\arsen\git\HorizonWeb\api\node_modules\@mikro-orm\core\entity\Collection.js:111:19)
    at Object.<anonymous> (C:\Users\arsen\git\HorizonWeb\api\src\teams\team.entity.spec.ts:11:22)
    at Promise.then.completed (C:\Users\arsen\git\HorizonWeb\api\node_modules\jest-circus\build\utils.js:390:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (C:\Users\arsen\git\HorizonWeb\api\node_modules\jest-circus\build\utils.js:315:10)
    at _callCircusTest (C:\Users\arsen\git\HorizonWeb\api\node_modules\jest-circus\build\run.js:218:40)

知道如何正确地对 MikroORM 实体进行单元测试吗?

【问题讨论】:

  • 和你@Ombrelin 有同样的问题;如果 MikroORM 从他们的测试文档中得到更多,我会很高兴。因为它是一个非常棒的库,但是像我这样的白痴很难开始正确的单元测试
  • 哈哈完全同意!作为记录,我所做的是完全抽象我的逻辑层,因为我使用了 TDD,并为业务实体和持久性实体使用了不同的类。我希望 ORM 框架能够以这种方式帮助我们
  • v5 有一些很酷的附加功能,例如至少使一些测试更容易的数据库播种器。当您的服务使用复杂查询时,您如何正确地进行单元测试,例如与模型关系,什么不是?

标签: node.js typescript unit-testing jestjs mikro-orm


【解决方案1】:

您需要先初始化 ORM 才能使用实体。对于不想接触数据库的单元测试,可以使用第二个参数不连接数据库,但需要进行实体发现。没有它,就没有元数据,也没有修补过的实体原型——这是传播工作所必需的。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多