Giter Club home page Giter Club logo

smock's Introduction

smock-core

SMock的核心代码,smock run的主要逻辑

版本命名规范

采用银河系九大行星的顺序来命名。

  • 1.0->mercury
  • 2.0->venus

安装

npm install smock-core --save-dev

调用

let Core = require('smock-core').Core;
new Core({
  docPath:'xxx.xxx.xx.xx',
  docPort:'80',
  path:''
})

参数说明

Attributes forma describe default
type String 文档数据源类型,暂只支持swagger swagger
docPath String type为swagger时,swagger文档访问路径 -
docPort Number type为swagger时,swagger的文档端口号 80
path String type为swagger时,swagger模式接口路径 /v2/api-docs
method String type为swagger时,文档数据请求方式 GET
realHostName String 项目上线后访问的真实域名 -
mockPort Number 启动服务的端口号 3000
customProtocol String type为swagger时,具体文档服务器协议http或https http
headers Object 创建本地服务器时接口header附加参数 -
jsPath String 创建服务器时抽取Url路径文件的存储路径 -
descInclude Array 调用接口时展示接口文档的白名单 -
override Boolean 重启服务时是否重新刷新数据 false

代码架构

代码采用 typescript。 代码校验:ESLint

项目命令

npm run dev: 执行Demo,可热更新,使用VSCode来调试开发即可 npm run build: 打包编译 npm run test: 运行单元测试js

smock's People

Contributors

shenqistart avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smock's Issues

能否集成docker

我觉得,可以和Swagger editor,docker集成来弄一个docker image,让使用者可以快速构建一个公用的mock api接口环境。

说一下一些短板

考虑的问题太过单一了
如果是分布式的系统的话 一个swagger页面里面其实会有很多子系统的 并不是打开一个swagger就一个接口数据

其实你这个swagger接口考虑的形式也太过得单一了

只能针对有提供参数的那种普通接口

其实接口名字里面有些是usingPost_1 usingPost_2之类的 这种名字是会变化的 你那边也没过滤
还有类似因为分布式的关系 后台接口的容器是有可能重名的 那么你这边就会出现直接覆盖的情况

我们团队我自己已经写了一个爬接口的脚本了
相比你这个的话 更加成熟点

const axios = require('axios').default;
const fs = require('fs')

// 使用之前 将这个url地址 替换为自己后台swagger网站的地址
const baseUrl = "http://192.167.5.112:7041";

const control = new Set([])

function tranChildren(data, path) {
  return data.map((e) => {
    const text =
      `
      /**
      * ${e.title}
      */
      function ${e.urlName.split('_')[0]}(paramsData = {}) {
          return (info)=>{
              return {target,isUrl:true,method:'POST',url:'${path}${e.url}',params:{...paramsData},...info}
          }
      }`
    return text
  }).join('')
}

function tranParent(name, data, path) {
  const str =
    `
     function ${name} (target) {
       ${tranChildren(data,path)}
       return {${data.map((e)=>e.urlName.split('_')[0]).toString()}}
     }
  `
  return str
}

function tranData(data, path = '') {
  const str = Object.keys(data).map((e) => {
    if (control.has(e)) {
      control.add(e + '_' + path.split('/')[1].toLocaleUpperCase())
      return tranParent(e + '_' + path.split('/')[1].toLocaleUpperCase(), data[e], path)
    }else {
      control.add(e)
      return tranParent(e, data[e], path)
    }
  }).join('')
  return `
    ${str.toString()}
  `
}

/**
 * 初始化获取网络请求数据
 *
 * @param {any}
 */
function getInitalNetWorkData(urlAddress) {
  return new Promise((resolve, reject) => {
    try {
      axios.get(baseUrl + urlAddress)
        .then((e) => {
          if (e.status === 200) {
            try
            {
              let obj = {}
              let path = e.data.basePath.split('/')[1]
              Object.keys(e.data.paths).forEach((el) => {
                const postData = e.data.paths[el].post || e.data.paths[el].get || e.data.paths[el].delete
                if (!postData) {
                  console.log("输出错误", e.data.paths[el]);
                }
                const name = postData.tags[0]
                if (name) {
                  if (!obj[name]) {
                    obj[name] = []
                  }
                  obj[name].push({
                    url: el,
                    title: postData.summary,
                    urlName: postData.operationId
                  })
                }else {
                  console.log('输出name',name)
                }
              })
              const content = tranData(obj, e.data.basePath.slice(0, -1));
              resolve({ text: content, arr: e.data.tags.map((el) => el.name) });
            }catch(error) {
              console.log('object',error)
            }

          } else {
            resolve({ error: true });
          }
        }) 
        .catch(error=>{
          resolve({ error: true});
        })
    } catch (error) {
      resolve({ error });
    }
  })
}

let urlText = "";
let funArr = []
function getNetInfo (filterData,excludeData) {
  axios.get("http://192.167.5.112:7041/swagger-resources")
  .then(async(e)=>{
    let filterResult = e.data.filter((ed) => filterData.length > 0 ? filterData.some((ef) => ed.url.indexOf(ef) !== -1) : true)
    filterResult = filterResult.filter((ed) => {
      return ed.url.indexOf('sso') == -1 &&ed.url.indexOf('app') == -1 

    })
    for (let i = 0; i < filterResult.length; i++) {
      const data = await getInitalNetWorkData(filterResult[i].url);
      if (!data.error) {
        urlText += data.text;
      }
    }
    const text = `
      ${urlText.toString()}
      export default {${Array.from(control).toString()}}
    `
    fs.writeFileSync("./src/command/api.js", text, "utf8");
  })
}

getNetInfo(['trace','upms/company','supe','inspection','company','reset','admin','vertify','info','brace','iot'],[])

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.