这是GSC前端SDK,提供与后端服务通信的工具和APIs。
npm install gsc-frontend-sdkbash
npm install gsc-frontend-sdk
`
使用示例
`javascript
import { RpcClient } from 'gsc-frontend-sdk';
// 创建一个RPC客户端实例
const client = RpcClient.New('user-service')
.setPath('User', 'getInfo')
.setHeader('appID', 'my-app');
// 获取数据
client.get('user-123')
.then(response => {
console.log('用户信息:', response);
})
.catch(error => {
console.error('获取数据失败:', error);
});
`
开发
$3
`bash
npm install
`
$3
项目使用Jest进行单元测试。可以运行以下命令执行测试:
`bash
运行所有测试
npm test
监视模式
npm run test:watch
生成测试覆盖率报告
npm run test:coverage
`
测试覆盖了以下关键模块:
- fetchClient: HTTP客户端,基于原生Fetch API实现
- RpcClient: RPC通信客户端
- Application: 应用程序上下文管理
$3
我们采用了两种测试策略:
1. 功能测试:直接测试模块功能,如fetchClient模块的方法存在性和基本行为
2. 模拟测试:对于依赖复杂的模块,我们采用模拟类进行隔离测试,确保核心功能正确
这种组合策略既能测试关键模块的真实行为,又能确保测试的稳定性和可靠性。
$3
以下是一些测试示例供参考:
#### fetchClient测试(直接功能测试)
`javascript
/**
* fetchClient 模块的单元测试
*/
import fetchClient from '../../../gfw/util/fetchClient.js';
describe('fetchClient', () => {
test('应该提供所有标准HTTP方法', () => {
expect(typeof fetchClient.get).toBe('function');
expect(typeof fetchClient.post).toBe('function');
expect(typeof fetchClient.put).toBe('function');
expect(typeof fetchClient.patch).toBe('function');
expect(typeof fetchClient.delete).toBe('function');
});
test('create方法应该返回包含HTTP方法的实例', () => {
const instance = fetchClient.create();
expect(typeof instance.get).toBe('function');
expect(typeof instance.post).toBe('function');
expect(typeof instance.put).toBe('function');
expect(typeof instance.patch).toBe('function');
expect(typeof instance.delete).toBe('function');
});
});
`
#### RpcClient测试(模拟测试)
`javascript
/**
* RpcClient 模块的单元测试
*/
describe('RpcClient 基本功能测试', () => {
// 创建一个模拟的RpcClient类用于测试
class MockRpcClient {
constructor(service) {
this.service = service;
this.class = '';
this.action = '';
}
static New(service) {
return new MockRpcClient(service);
}
setPath(className, actionName) {
this.class = className;
this.action = actionName;
return this;
}
}
test('工厂方法应该创建RpcClient实例', () => {
const client = MockRpcClient.New('test-service');
expect(client instanceof MockRpcClient).toBe(true);
expect(client.service).toBe('test-service');
});
test('setPath方法应支持链式调用', () => {
const client = MockRpcClient.New('test-service');
const result = client.setPath('TestClass', 'testMethod');
expect(result).toBe(client);
expect(client.class).toBe('TestClass');
expect(client.action).toBe('testMethod');
});
});
`
主要改进
- 移除Axios依赖:使用原生Fetch API实现HTTP客户端,减轻了包大小并改善了性能
- 模块化设计:清晰的代码结构和接口设计,方便扩展和维护
- ES模块支持:完全基于ES模块,更好地支持现代JavaScript开发
- 测试框架:添加了Jest测试框架和基础测试用例,提高代码质量
- 依赖更新:更新了所有依赖到最新版本,提高安全性
技术栈
- ES模块(使用type: "module"`)