如何用Jest单元测试覆盖TypeORM@Column装饰器? [英] How to cover TypeORM @Column decorator with Jest unit testing?

查看:0
本文介绍了如何用Jest单元测试覆盖TypeORM@Column装饰器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望尽可能多地对我的应用程序进行单元和e2e测试,我的目标是覆盖率达到101%。我的设置现在的问题是,来自typeorm的@Column修饰符使用一个箭头函数来设置一个缺省值,比如数据库更新上的当前时间戳。此箭头函数不包含在JEST测试覆盖范围内。消息为:statement not covered

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

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

Package.json中的Jest配置:

{
  "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

推荐答案

我在GraphQL修饰器上遇到了类似的问题。因为所有这些都是函数,所以您可以做的是创建一个包含您将使用的所有函数的文件,命名并导出它们,这样您也可以实际测试它们并使用Jest获得覆盖率。(从字面上看,测试应该类似于expect(namedFunction).toBe('CURRENT_TIMESTAMP()')或非常类似。查看示例you can see my function heremy tests here

编辑2020年3月11日

代码示例不再有了。也就是说,您可以做类似

的事情
export const returnString = () => String;

@Query(returnString)

用于GraphQL。对此的测试将如下所示

expect(returnString()).toBe(String);

这篇关于如何用Jest单元测试覆盖TypeORM@Column装饰器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆