TypeScript中导入对象的模拟函数
我有一个TypeScript文件,它导出两个对象(由创建) 我将脚本导入到测试脚本中TypeScript中导入对象的模拟函数,typescript,unit-testing,mocking,jestjs,typegoose,Typescript,Unit Testing,Mocking,Jestjs,Typegoose,我有一个TypeScript文件,它导出两个对象(由创建) 我将脚本导入到测试脚本中 // script-under-test.ts import { MyDocumentModel } from './my-document'; export async function createDocument(doc: any) { return await MyDocumentModel.create(doc); } 现在我尝试模拟调用MyDocumentModel.create(doc)
// script-under-test.ts
import { MyDocumentModel } from './my-document';
export async function createDocument(doc: any) {
return await MyDocumentModel.create(doc);
}
现在我尝试模拟调用MyDocumentModel.create(doc)
但是我得到了以下错误-呼叫数:0
如何模拟导入对象的函数?您应该实现的工厂函数 例如
my document.ts
:
//模拟Typegoose类
类类型鹅{
公共getModelForClass(cls){
返回cls.toString();
}
}
导出类MyDocument扩展了Typegoose{}
export const MyDocumentModel=new MyDocument().getModelForClass(MyDocument);
测试中的脚本。ts:
从“/mydocument”导入{MyDocumentModel};
导出异步函数createDocument(文档:任意){
返回等待MyDocumentModel.create(单据);
}
测试中的脚本.test.ts
:
从“/mydocument”导入{MyDocumentModel};
从“./测试中的脚本”导入{createDocument};
jest.mock('./我的文档',()=>{
常量mMyDocumentModel={create:jest.fn()};
返回{MyDocumentModel:mMyDocumentModel};
});
描述('创建',()=>{
它('应该创建一个新文档',异步()=>{
常量有效载荷={foo:'bar'};
MyDocumentModel.create.mockResolvedValueOnce(文档);
const result=等待创建文档(有效负载);
expect(MyDocumentModel.create).toHaveBeenCalledWith(payload);
期望(结果)到trictequal(文件);
});
});
100%覆盖率的单元测试结果:
PASS stackoverflow/61388982/script-under-test.test.ts(10.103s)
创造
✓ 应创建新文档(5ms)
----------------------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------------------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
script-under-test.ts | 100 | 100 | 100 | 100 |
----------------------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:11.535s
您似乎可以编写MyDocumentModel.create=createMock
。
// script-under-test.ts
import { MyDocumentModel } from './my-document';
export async function createDocument(doc: any) {
return await MyDocumentModel.create(doc);
}
// script-under-test.test.ts
import { MyDocumentModel } from './my-document';
import { createDocument } from './script-under-test.ts';
jest.mock('./my-document');
describe('creation', () => {
const MyDocumentModelMock = MyDocumentModel as unknown as jest.Mock;
it('should create a new document', async () => {
const payload = { foo: 'bar' };
const document = {} as Document;
const createMock = jest.fn();
createMock.mockReturnValueOnce(document);
MyDocumentModel.mockImplementation(() => ({ create: createMock }));
const result = await createDocument(payload);
expect(createMock).toHaveBeenCalledWith(payload);
expect(result).toStrictEqual(document);
});
});