我如何使用Jest和Typescript使用__mocks_folder在多个地方使用这个模拟

问题描述 投票:0回答:1

我有一个在测试中定义的模拟。我发现我需要一次又一次地使用那个模拟。我尝试使用手动 mocks 文件夹,但不知道如何让它工作。当我直接在测试文件中使用它时,它工作得很好。但是,我不想一次又一次地复制和粘贴,而且我有更复杂的测试,其中使用了许多模拟。

这是我在 mocks 文件夹中的模拟定义

//mocks/books/book-search-service.ts 如下所示


         const findBooksMock = jest.fn()
         const createBookSearchRequestMock = jest.fn()
         jest.mock('../../services/book-search-service', () =>{
          return {
              BooksSearchService: jest.fn().mockImplementation(() =>{
                return {
                  findBooks: findBooksMock,
                  createBookSearchRequest: createBookSearchRequestMock
            }
        })
    }
})

在我的项目中,我的服务位于 src/books/book-search-service.ts 中。 但是,当我在测试中创建服务时,它调用真正的服务,这告诉我它没有使用 mocks/books 文件夹

中的模拟服务

在我的测试中,这是我如何使用它

         
         import { BookSearchService } from '../../books/book-search-service'
         
         describe('books service suite', ()=> {

            const bookSearchService = new BookSearchService()
            // rest of code

         }

如何让它发挥作用?我尝试阅读文档,但没有找到与我想要做的类似的示例。我正在做的事情是朝着正确的方向迈出的一步还是完全错误的?我希望有一个简单的例子可以让我完成这个工作。预先感谢您。

typescript jestjs mocking
1个回答
0
投票

模拟用户模块

当我们在测试中需要该模块时(意味着我们想要使用手动模拟而不是真正的实现),显式调用

jest.mock('./moduleName')
required

您仍然需要在每个测试文件中调用

jest.mock('../../services/book-search-service')
。只是不需要提供模拟工厂参数

© www.soinside.com 2019 - 2024. All rights reserved.