【问题标题】:Can I apply 'setupFilesAfterEnv' to specific file in jest config?我可以将 \'setupFilesAfterEnv\' 应用于 jest 配置中的特定文件吗?
【发布时间】:2022-09-27 09:43:48
【问题描述】:

我正在应用棱镜unit testingIntegration testing

我想对*.service.test.ts 文件应用单元测试 和*.test.ts 文件的集成测试。

我遵循了 Prisma 文档,但有些东西不起作用。

  • 单例.ts
import { mockReset, mockDeep, DeepMockProxy } from \"jest-mock-extended\";
import { PrismaClient } from \"@prisma/client\";
import Prisma from \"../src/db/prisma\";

jest.mock(\"../src/db/prisma\", () => {
  return {
    __esModule: true,
    default: mockDeep<PrismaClient>(),
  };
});

beforeEach(() => {
  // eslint-disable-next-line no-use-before-define
  mockReset(prismaMock);
});

export const prismaMock = Prisma as unknown as DeepMockProxy<PrismaClient>;

  • jest.config.ts

当关闭setupFilesAfterEnv 选项时,测试*.test.ts 文件正在工作。

所以我想在集成测试中关闭setupFilesAfterEnv 选项

仅在单元测试时适用吗?

...

setupFilesAfterEnv: [
 \"./jest/singleton.ts\"

]

    标签: node.js unit-testing integration-testing prisma ts-jest


    【解决方案1】:

    我认为你的问题有点不完整,但我可能知道你在说什么,因为我遇到了类似的问题。

    如果您尝试从 prisma 文档中进行集成测试,则需要在集成测试中取消模拟您的 prisma 客户端。否则它仍然会被你的 singleton.ts 文件嘲笑

    像这样的东西:

    myTest.test.js

    jest.unmock("../src/db/prisma");
    

    我做了什么 :

    我创建了 2 个测试文件(一个用于集成,另一个用于单元测试:CreateData.unit.test.tsCreateData.int.test。我还创建了 2 个单例文件:

    单例.unit.ts(我希望将其应用于我的单元测试)

    import { PrismaClient } from '@prisma/client';
    import { mockDeep, mockReset, DeepMockProxy, mock } from 'jest-mock-extended';
    import prismaClient from '../prismaClient';
    
    jest.mock('../prismaClient', () => ({
        __esModule: true,
        default: mockDeep<PrismaClient>(),
    }));
    
    beforeEach(() => {
        mockReset(prismaMock);
    });
    
    export const prismaMock = prismaClient as unknown as DeepMockProxy<PrismaClient>;
    import { PrismaClient } from '@prisma/client';
    import { mockDeep, mockReset, DeepMockProxy, mock } from 'jest-mock-extended';
    import prismaClient from '../prismaClient';
    
    jest.mock('../prismaClient', () => ({
        __esModule: true,
        default: mockDeep<PrismaClient>(),
    }));
    
    beforeEach(() => {
        mockReset(prismaMock);
    });
    
    export const prismaMock = prismaClient as unknown as DeepMockProxy<PrismaClient>;
    

    单例.int.ts(我希望将其应用于我的集成测试)

    import prismaClient from '../prismaClient';
    
    afterAll(async () => {
        const deleteData = prismaClient.data.deleteMany();
    
        await prismaClient.$transaction([
            deleteData,
        ]);
    
        await prismaClient.$disconnect();
    });
    
    export { prismaClient }; 
    

    不要忘记更新您的jest.config.js(类似的东西)

     setupFilesAfterEnv: [
            './src/database/testsSingleton/singleton.unit.ts',
            './src/database/testsSingleton/singleton.int.ts'
        ],
    

    然后创建您的单元测试和集成测试。创建集成测试时,不要忘记模拟 prisma 客户端:

    myTest.int.test.ts

    import prismaClient from "<path>/database/prismaClient";
    import { CreateData } from "<path>/CreateData"
    
    jest.unmock("<path>/database/prismaClient");
    
    let createData;
    let createDate = new Date();
    const data = {
        id: "randomId1234",
        name: "Bob Singer",
        email: "bob@gmail.com",
        password: "123456",
    };
    beforeEach(() => {
        createData = new CreateData();
    });
    
    describe('CreateTrainer', () => {
        it("should create new trainer", async () => {
            const result = await createData.execute(data);
            const newTrainer = await prismaClient.data.findUnique({
                where: {
                    email: "bob@gmail.com"
                }
            });
    
            console.log(result);
            expect(newTrainer?.email).toEqual(trainer.email);
        });
    });
    
    
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 2021-03-14
      • 2015-09-02
      • 2021-06-06
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      相关资源
      最近更新 更多