Как покрыть TypeORM @Column decorator модульным тестированием Jest? - PullRequest
2 голосов
/ 07 ноября 2019

Я хочу, чтобы модуль и e2e максимально тестировали мои приложения, и моя цель - охват 101%. Сейчас проблема с моей установкой заключается в том, что декоратор @Column из typeorm использует функцию стрелки для установки значения по умолчанию, такого как текущая метка времени при обновлении базы данных. Эта функция стрелки не покрыта тестовым шутом. Сообщение: statement not covered

Я запускаю покрытие кода с помощью: jest --coverage. Мои версии:

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

Настройка Jest в 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

1 Ответ

1 голос
/ 07 ноября 2019

Я столкнулся с подобной проблемой с декораторами GraphQL. Поскольку все это функции, вы можете создать файл, содержащий все функции, которые вы будете использовать, присваивать им имена и экспортировать их, чтобы вы также могли их протестировать и получить покрытие с помощью Jest. (Тесты должны быть буквально похожи на expect(namedFunction).toBe('CURRENT_TIMESTAMP()') или очень похожи. Для примера вы можете увидеть мою функцию здесь и мои тесты здесь .

...