面试题答案
一键面试- 首先确保你已经安装了
mocha
和chai
:npm install mocha chai --save -dev
- 假设
getUser
函数在userService.js
文件中,代码如下:// userService.ts export interface User { name: string; age: number; email: string; } export const getUser = (): Promise<User> => { // 这里只是模拟,实际应该有真实逻辑 return Promise.resolve({ name: 'test', age: 18, email: 'test@example.com' }); };
- 编写测试用例,在
test/userService.test.ts
文件中:
在上述代码中:import { expect } from 'chai'; import { getUser, User } from '../userService'; describe('getUser', () => { it('should return data in User interface structure', async () => { try { const user = await getUser(); const userAsserted: User = user as User; expect(userAsserted.name).to.be.a('string'); expect(userAsserted.age).to.be.a('number'); expect(userAsserted.email).to.be.a('string'); } catch (error) { expect.fail('getUser should not reject', error); } }); });
- 首先从
chai
引入expect
断言库。 - 从
userService
导入getUser
函数和User
接口。 - 使用
describe
和it
定义测试用例。 - 在测试用例中,通过
await
获取getUser
解析出来的数据,然后使用类型断言as User
将其断言为User
类型。 - 接着使用
expect
对解析出来的数据的属性进行类型检查,确保符合User
接口定义。如果数据不符合User
接口结构,expect
会抛出错误,从而使测试失败。
- 首先从
如果在实际项目中,getUser
可能会返回rejected
的Promise
,你可以这样处理:
describe('getUser', () => {
it('should return data in User interface structure', async () => {
try {
const user = await getUser();
const userAsserted: User = user as User;
expect(userAsserted.name).to.be.a('string');
expect(userAsserted.age).to.be.a('number');
expect(userAsserted.email).to.be.a('string');
} catch (error) {
// 如果Promise被rejected,这里可以根据实际情况检查错误类型等
expect.fail('getUser should not reject', error);
}
});
it('should handle rejection correctly', async () => {
try {
await getUser();
expect.fail('getUser should reject');
} catch (error) {
// 这里可以对错误进行断言,比如错误类型等
expect(error).to.be.an('error');
}
});
});