我有一个在测试中定义的模拟。我发现我需要一次又一次地使用那个模拟。我尝试使用手动 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
}
如何让它发挥作用?我尝试阅读文档,但没有找到与我想要做的类似的示例。我正在做的事情是朝着正确的方向迈出的一步还是完全错误的?我希望有一个简单的例子可以让我完成这个工作。预先感谢您。
当我们在测试中需要该模块时(意味着我们想要使用手动模拟而不是真正的实现),显式调用
是 required。jest.mock('./moduleName')
您仍然需要在每个测试文件中调用
jest.mock('../../services/book-search-service')
。只是不需要提供模拟工厂参数