
client.js
module.exports = class ProductsClient { async getById(id) { const url = `http://localhost:3000/api/products/{id}`; const respOnse= await fetch(url); return await response.json(); } } manager.js
const ProductsClient = require('./client'); module.exports = class ProductManager { async getProductToManage(id) { const productsClient = new ProductsClient(); const productToManage = await productsClient.getById(id) .catch(err => alert(err)); return productToManage; } } test.js
const ProductsClient = require('./client'); const ProductManager = require('./manager'); jest.mock('./client'); describe('test', () => { test('111', async () => { const expectedProduct = { id: 1, name: 'football', }; const mockGetById = jest.fn(); mockGetById.mockResolvedValue(expectedProduct); ProductsClient.prototype.getById = mockGetById; const productManager = new ProductManager(); const result = await productManager.getProductToManage(1); expect(result.name).toBe('football'); }) }) 在 test.js 中 mock client 完全没问题。一旦把const productsClient = new ProductsClient();拿到class ProductManager外,getById就返回 undefined
const ProductsClient = require('./client'); const productsClient = new ProductsClient(); module.exports = class ProductManager { async getProductToManage(id) { const productToManage = await productsClient.getById(id) // undefined .catch(err => alert(err)); return productToManage; } } jest mock module 文档里也没找到类似的例子。
1 red2dog 2021-02-17 23:10:28 +08:00 jest.mock('./client',()=>{ return '你要 mock 的东西' }); 你 mock 啥都没传肯定是 undefined 啊 |
3 lbfeng OP @red2dog Calling jest.mock() with the module factory parameter https://jestjs.io/docs/en/es6-class-mocks |
4 KuroNekoFan 2021-02-18 10:03:23 +08:00 云了一下 应该是你最后的写法里,实例化 ProductsClient 的时候,'./client'还没被 mock 试试把 jest.mock('./client');放到最顶? |