jest mock 返回 undefined
資深大佬 : lbfeng 2
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 文档里也没找到类似的例子。
大佬有話說 (4)