如何用Jest单元测试覆盖TypeORM @Column装饰器?

我想尽可能地对我的应用程序进行单元测试和e2e测试,我的目标是覆盖率达到101%。我的安装程序现在遇到的问题是,来自typeorm的@Column装饰器使用箭头功能来设置默认值,例如数据库更新时的当前时间戳。笑话测试范围未涵盖此箭头功能。消息是:statement not covered

我使用以下代码运行代码覆盖率:jest --coverage。 我的版本:

"jest": "^24.9.0","typeorm": "^0.2.20"

package.json中的最佳配置:

{
  "jest": {
    "moduleFileExtensions": [
      "js","json","ts"
    ],"rootDir": "src","testRegex": ".spec.ts$","transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },"coverageDirectory": "../build/coverage","testEnvironment": "node","coverageThreshold": {
      "global": {
        "branches": 80,"functions": 80,"lines": 80,"statements": -10
      }
    }
  },}

我的实体看起来像这样:

import { Column,Entity,PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Role {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    tenantId: number;

    @Column({ type: 'timestamp',update: false,default: () => 'CURRENT_TIMESTAMP()' })
    createdAt: Date;

    @Column({ type: 'timestamp',default: () => 'CURRENT_TIMESTAMP()',onUpdate: 'CURRENT_TIMESTAMP()' })
    updatedAt: Date;
}

此实体的覆盖范围:

(要发布图片,我需要10个信誉-.-):https://i.ibb.co/FYQgstP/Screenshot-2019-11-07-11-46-45.png

oOFoXOo 回答:如何用Jest单元测试覆盖TypeORM @Column装饰器?

我遇到了与GraphQL装饰器类似的问题。由于所有这些都是函数,因此您可以做的是创建一个文件,其中包含您将要使用的所有功能,命名它们并导出它们,以便您实际上也可以对其进行测试并获得Jest的覆盖率。 (测试的字面意义应该类似于expect(namedFunction).toBe('CURRENT_TIMESTAMP()')或非常相似。例如you can see my function heremy tests here

,

基于@JayMcDoniel的回答,这是对我有用的解决方案。

  • 数据库类型:postgreSQl
  • 测试:jest/chai

函数类:

  export abstract class EntityDefaultFunctions {
    public static defaultNull = (): string => 'NULL';
    public static defaultZero = (): string => '0';
  }

测试:

  expect(EntityDefaultFunctions.defaultNull()).to.equal('NULL');
  expect(EntityDefaultFunctions.defaultZero()).to.equal('0');

示例实体列定义:

  @Column('text',{
    default: EntityDefaultFunctions.defaultNull,name: 'somePropertyName'
  })
本文链接:https://www.f2er.com/3145463.html

大家都在问