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 文档里也没找到类似的例子。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.