在本教程中,你学到了如何在typescript中测试一个模拟接口。
Typescript是javascript的高级版本,具有typeafe检查等强大功能。
Jest是一个类似于Facebook的jasmine的单元测试框架。
如何在Jest中模拟一个接口?
让我们在typescript中声明一个接口,接口中使用枚举。
role.ts:
enum ROLE {
ADMIN,
SALES,
FINANCE
}
user.ts:
export interface User {
id: number;
name: string;
role: ROLE.ADMIN | ROLE.FINANCE | ROLE.SALES;
}
这里有一个User.spec.ts,用于模拟接口。
Jest mock interface example:
- 首先创建一个具有所有定义值的模拟接口
- 检查模拟对象是否未定义,并断言其值为预期值。
describe('User', () => {
const mock = jest.fn(() => {
return {
id: 1,
name: 'john',
role: ROLE.ADMIN,
};
});
it('should check mock object', () => {
const user = mock();
expect(user).toBeDefined();
});
it('should check properties', () => {
const user = mock();
expect(user.name).toEqual('john');
expect(user.role).toEqual(ROLE.ADMIN);
});
});
如何模拟一个包含异步承诺的接口?
让我们定义一个有以下方法返回Promise的服务
interface UserService {
getEmployee: () => Promise
}
下面是一个例子jest async method interface example
以下是创建mock的步骤
- 首先使用jest.fn创建一个模拟接口,其方法可以解析为一个对象。
- 下一步是定义模拟对象的断言检查
- 检查assert对象的promise方法以检查解决的值
let userServiceMock: UserService;
describe('UserService', () => {
beforeAll(() => {
userServiceMock.getEmployee = jest.fn(() => Promise.resolve({
id: 1,
name: 'john',
role: ROLE.ADMIN,
}));
});
it('should check mock object', () => {
expect(userServiceMock).toBeDefined();
});
it('should check properties', () => {
userServiceMock.getEmployee();
expect(userServiceMock.getEmployee).toHaveBeenCalled();
expect(userServiceMock.getEmployee.mock.results[0].value).resolves.toBe({
id: 1,
name: 'john',
role: ROLE.ADMIN,
})
});
});
总结
你学会了用jest框架在typescript中模拟一个接口,也学会了用异步方法模拟一个接口。