acacode / acacode/swagger-typescript-api
also generate mock files
- Ngôn ngữ chính
- TypeScript
- Star
- 4.1k
- Fork
- 436
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
Hello,
I use swagger-template-typescript to generate all API calls.
As I also make some unit / functional tests and need to mock API calls, I sometimes had to wite things like:
```
fetchMock.get(
`/api/me`,
403
);
```
As you can notice neither path / query or response are typed...
Is there a plan to add mock generator ?
As a "workaround" I currently use extraTemplates option to generate files I need, but I can only generate 1 file per API (no modular) ...
I'm not sure this feature is broadly needed, and my template contains some shortcuts i took for my personnal needs / api, so its not 100% generic.
Anyway here is my template, if that can help someone or be a start for a generic feature:
```
<%
const { _ } = it.utils;
let dataContracts = _.map(it.modelTypes, "name");
%>
import fetchMock from 'fetch-mock/esm/client';
<%
let types = '';
it.routes.combined.forEach((route) => {
route.routes.forEach((realRoute) => {
types = `${types} ${realRoute.response.type}`;
const pathParams = realRoute.request.parameters.map((p) => p.type).join(' ');
types = `${types} ${realRoute.response.type} ${pathParams}`;
})
})
dataContracts = dataContracts.filter((dc) => new RegExp(`\\b(${dc})\\b`).test(types));
%>
<% if (dataContracts.length) { %>
import { <%~ dataContracts.join(', ') %> } from "./<%~ it.config.fileNames.dataContracts %>"
<% } %>
<%
it.routes.combined.forEach((route) => {
route.routes.forEach((realRoute) => {
const pathParams = realRoute.request.parameters.map((p) => `${p.name}${p.optional ? '?' : ''}: ${p.type}`).join(', ');
const availableQueryFields = realRoute.request.requestParams?.properties ? Object.keys(realRoute.request.requestParams?.properties) : [];
const responseType = `${realRoute.response.type !== 'void' ? realRoute.response.type : 'undefined'} | number`
%>
export const <%= realRoute.routeName.usage %>Mock = (<%~ pathParams ? `${pathParams}, `: '' %>queryParams: string, response: <%~ responseType %>) => {
const possibleParams: Array = <%~ JSON.stringify(availableQueryFields) %>;
const routeParameters = queryParams.split('&').map((s) => s.split('=')[0]);
if(routeParameters.filter((rp) => !possibleParams.includes(rp))) {
throw new Error('invalid query params');
}
return fetchMock.<%= realRoute.request.method %>(`<%= it.apiConfig.baseUrl.includes('private-api') ? '/private-api' : '/api' %><%= realRoute.request.path %>`, response || 200);
}
<%
})
}) %>
```
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Đánh giá
Issue này chưa được đánh giá.