Git Product home page Git Product logo

better-mock's Introduction

Hi there, I'm lavyun

Now I'm working at Bytedance Ltd as a web frontend developer.

Languages and Tools:

better-mock's People

Contributors

lavyun avatar limjcst avatar lqzhgood avatar mocobk avatar wll8 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

better-mock's Issues

[BUG] image api 与 mockjs 不兼容

PS: 我叕来提 issue 了~

问题简述
根据 better-mock 的 readme.md 上描述:

100% 兼容 Mock.js。

但是根据 mockjs 的使用文档以及运行结果看来, 与 better-mock 是不相同的.

参考:

复现步骤

Mock.mock(`@image(200x100, #ff0000)`)
// => "https://iph.href.lu/200x100?bg=&fg=&text=#ff0000"
Mock.mock(`@image(200x100, #ff0000)`)
// => "http://dummyimage.com/200x100/ff0000"

期望结果
api 与 mockjs 保持一致.

Mock.mock(`@image(200x100, #ff0000)`)
// => "https://iph.href.lu/200x100?bg=ff0000"
// 或
// => "http://dummyimage.com/200x100/ff0000"

[BUG] async function return undifined

问题简述
同步函数 async function 会返回空值undifined

复现步骤
在自带的练习环境中,输入

Mock.mock('http://example.com/path/to', async ()=>{
 return await new Promise ((resolver)=>resolver('TEST'))

})

axios.get('http://example.com/path/to').then(res => {
    console.log(res.data)
})

截图
image

[BUG] Mock.valid()方法——mockjs遗留的bug

问题简述
valid(temp,data)方法,当temp方法里存在占位符,valid()一直返回通过

复现步骤
var template = {
type: "@pick(['number','datetime','string'])"
}
var data = {
type: 123
}
const rst = Mock.valid(template, data)
// rst输出 []

期望结果
type字段不符合

[Feature] async

描述一下你期望的新特性
希望能够支持返回 promise,参考 mockjs-async

[BUG] 返回 Promise 时,fetch 调用返回空对象

问题简述
返回 Promise 时,fetch 调用返回空对象

复现步骤
请详细介绍如何复现该问题,有利于我们定位,例如:

  Mock.mock('/api/test/async', 'get', () => {
    return new Promise((resolve) => {
      resolve({ value: 'test' });
    });
  });
const res1 = await axios.get('/api/test/async');
console.log(res1.data);// => {value:'test'}

const res2 = await (await fetch('/api/test/async')).json();
console.log(res2); // => {}

期望结果
fetch 返回正确的结果

环境
请描述一下你的代码运行环境。

  • Env: 浏览器
  • OS: PC
  • better-mock version: 0.3.4

[BUG] 含 `@` 符合的 mock 数据将报错

问题简述

@ 符号的 mock 数据将报错

复现步骤

https://runkit.com/embed/6hqspmnzc9ih

var Mock = require("better-mock")

Mock.mock({
  success: true,
  "data|3": [{
    data: {
      name: '@alipay/vc-component',
    }
  }]
})

报错

TypeError: Cannot read property '0' of undefined

期望结果
不报错

截图

环境
请描述一下你的代码运行环境。

  • Env: Node.js
  • better-mock version: 0.2.5

[BUG] 使用umi-request,拦截后完全看不到请求....

问题简述
使用umi-request,拦截后完全看不到请求....

login.js:

import Mock from 'better-mock';
const login = {
  login: () => Mock.mock(/\/api\/login\/account/, 'POST', (url) =>{
    console.log(url);
    return {
    status: 200,
    data: {
      role: 'user',
      userId: '323',
      token: 'fafaf',
      ssKey: '24234',
      userName: 'fafa',
    }
  }
})
}

index.js

import Mock from 'better-mock';
import login from './login';
Mock.setup({
  timeout: '200-600'
});
const mockList = {
  login
}

const runMock = () => {
  Object.values(mockList).forEach(function (val) {
    Object.getOwnPropertyNames(val).forEach(function (api) {
      console.log(val, api);
      val[api]();
    })
  });
}

export default runMock;

请教一个Mock的问题

您好,请教一个问题,我使用better-mock如何拦截 /api/xxx?id=3 这种类型的url, 试了下一直报404,谢谢

Request URL: http://localhost:9527/dev-api/v1/app?id=1
Request Method: GET
Status Code: 404 Not Found

[Feature] 添加类型转换规则

添加生成后的数据类型转换规则

很多时候我们知道数据的类型, 例如使用正则可以方便的创建想要的数据格式, 但目前没有找到方便的类型转换方式。

例如: @id, @phone, /\d\d/ 类似的数据如何方便的转换为数字?

期望添加类型转换功能.

能不能在规则中去添加这个功能?
例如:

Mock.mock({data: {"age": /\d\d/}}).data.age // => "20"
// 第一个竖线表示原来的范围规则, 第二个竖线后面的字符表示类型
Mock.mock({data: {"age||number": /\d\d/}}).data.age // => 20

Mock.mock({data: {"age|3-5": /\d\d/}}).data.age // "3405820858"
Mock.mock({data: {"age|3-5|number": /\d\d/}}).data.age // 3405820858

Mock.mock({data: {"phone": `@phone`}}).data.phone // => "14927520949"
Mock.mock({data: {"phone||number": `@phone`}}).data.phone // => 14927520949

[BUG] @name 和 @cname 出现的值总是一样

问题简述
@name@cname 出现的值总是一样

复现步骤

  1. 访问 mockjs 示例官网 http://mockjs.com/examples.html 并打开控制台, 粘贴以下代码:
Mock.mock({
  "data|1": [
    {
      "name": "@cname",
      "title": "@name",
    }
  ]
}).data

使用 [email protected] 来运行以上代码也是一样.

期望结果

截图
如果有截图,可以贴一下截图。
image

环境
请描述一下你的代码运行环境。

  • Env: chrome 版本 86.0.4240.75(正式版本) (64 位)
  • OS: win10x64
  • better-mock version: [email protected]

react-native 拦截所有接口而非指定url

问题简述
应用后拦截了所有接口请求且获取不到数据,返回:
[ReferenceError: Property 'location' doesn't exist]或者[ReferenceError: Property 'location' doesn't exist]

复现步骤
1、这是我的mock,js
const Mock = require('better-mock');

const data = Mock.mock({
'list|6-10': [
() =>
Mock.mock({
course_name: '课程名称',
'course_desc|20-100': '*',
module_name: '模块',
'zsd_id|5-10': '1111',
'is_enable|1-2': true,
'degree|1-5': 1, // 难度
}),
],
});
console.log(data);

Mock.mock(/api/v4/course/catalogue/, 'post', option => {
console.log('mock---api/v4/course/catalogue请求参数', option);
return data;
});

2、这是我在根目录index.js的引用代码
// 引入mock
let mock = true;
if ((env === 'test' || env === 'dev') && mock) {
require('./mock');
}

3、这是我的接口调用(post是封装好的带naseUrl的axios请求)
function getCourseCatalogue({
user_id,
course_id,
class_id,
}: {
user_id: number;
course_id: number;
class_id: number;
}) {
return post('api/v4/course/catalogue', {user_id, course_id, class_id}, false);
}

期望有小伙伴能帮助解决~

关于dataImage的处理方式

我看到使用了 jimp 并且因为需要同步调用,使用了promise-synchronizer

这个会有些问题,在 worker_threads 中会导致一直pending状态,建议换回原版的node-canvas

[BUG] 扩展的方法不能与生成规则配合使用

问题简述
参考 #63 , 希望对生成的数据进行类型处理. 使用 extend 来创建一个可以转换类型的模板, 但与生成规则配合使用时, 还是会当做字符串.

复现步骤

window.Mock.Random.extend({
  to_number: data => {
    const res = Number(data)
    return isNaN(res) ? 0 : res
  },
})

value = Mock.mock({
  "a": "@to_number(2)"
})
console.log(`value`, value)
// out => 2

rule = Mock.mock({
  "a|1-5": "@to_number(2)"
})
console.log(`rule`, rule)
// out => "2222"

期望结果

rule = Mock.mock({
  "a|1-5": "@to_number(2)"
})
console.log(`rule`, rule)
// 输出 => "2222"
// 期望 => 4 , 即在 1-5 之间

环境

  • Env: chrome 版本 86.0.4240.75(正式版本) (64 位)
  • OS: win10x64
  • better-mock version: [email protected]

[BUG] 在当前 value 中的出现的函数是当前的 key 时, 不应有引用关系

问题简述
如果当前键的 key pick 是 mock 的生成函数, 则不应该出现递归引用. 否则导致循环引用而导致崩溃: Maximum call stack size exceeded .

{
  "pick": " @pick(['a', 'b'])"
}

复现步骤
点此 打开控制台粘贴以下代码:

s = Mock.mock({
  "pick": "@pick(['a', 'b'])"
})
console.log(s) // a
s = Mock.mock({
  "pick": " @pick(['a', 'b'])"
})
console.log(s) // Maximum call stack size exceeded

期望结果

s = Mock.mock({
  "pick": "@pick(['a', 'b'])"
})
console.log(s) // a
s = Mock.mock({
  "pick": " @pick(['a', 'b'])"
})
console.log(s) //  a

环境

  • Env: chrome 版本 86.0.4240.75(正式版本) (64 位)
  • OS: win10x64
  • better-mock version: [email protected]

[BUG] 多了个debugger

期望结果
这里是不是多了个 debugger 没有删除?

截图
image

环境
请描述一下你的代码运行环境。

  • better-mock version: v0.3.0

[BUG] mock模块会影响原生的ajax请求,使得服务器返回的blob类型变成乱码

问题简述

这是 mockjs 就存在的问题,目前我们项目也遇到了。

复现步骤
https://www.jianshu.com/p/37ded5f2fdac
https://segmentfault.com/q/1010000014704618

期望结果

我们目前在代码里面添加这一行解决了

image

参考这里的
https://segmentfault.com/q/1010000014704618

截图

  axios.post('/api/file/xxx', data,  { responseType: 'blob' })

环境

请描述一下你的代码运行环境。

  • Env: 浏览器
  • OS: PC
  • better-mock version: 所有

[Feature] 可否添加自定义的 http 状态码的功能?

由于 restful api 一般会复用 http 状态码作为响应代码,建议添加自定义 http status code 的功能。
例如:
使用一个类似 _status 的保留属性作为可选的自定义状态码

  Mock.mock('/api/demo', 'DELETE', (request) => {
    const items = JSON.parse(request.body ?? '[]');
    if (items.length) {
      return { code: 200, message: '删除成功', _status: 204 };
    }
    return { code: 400, message: '参数不能为空', _status: 400 };
  });

返回值读取自定义状态码并删除该属性

const result = mocked.convert(this.custom.template, this.custom.options);
this.status = result._status ?? 200;
delete result._status;

以上
谢谢

[BUG] @pick(text) 返回值错误

问题简述
@pick(text) 返回值是一个对象,而 @pick(text1) 返回字符串 text1 。

请求 text 有什么特殊的吗?如果特殊,如何处理?

复现步骤
点此 打开控制台粘贴以下代码:

typeof Mock.mock(`@pick(text)`) // object
typeof Mock.mock(`@pick(text1)`) // string

期望结果

typeof Mock.mock(`@pick(text)`) // string
typeof Mock.mock(`@pick(text1)`) // string

环境

  • Env: chrome 版本 86.0.4240.75(正式版本) (64 位)
  • OS: win10x64
  • better-mock version: [email protected]

[Feature] Add English readMe and Documents

Hi, I really like this project and appreciate your contributions. And currently, I want to use it in my project. So, would you mind adding an English readMe and documents? Also, if possible, could we make the English readme and documents default?

I would try to provide the PR, at least for the readMe. Anyway, thanks very much for your efforts.

[Feature] 文档更新

描述一下你期望的新特性
建议与mockjs 作者联系,然后在其 readme 增加 better-mock 的链接,让这个项目让更多同学看到

👍

怎么在app中使用

怎么在app中使用better-mock ,在H5中和小程序中都可以运行,app中不行,是少了什么步骤吗,还是不支持(我是用的是uniapp😁)

[Feature] 希望在 dist/mock.node.js 中实现Mock.setup

dist/mock.browser.js dist/mock.mp.js中均包含Mock.setup方法,但dist/mock.node.js中没有,这给单元测试带来了麻烦。
当执行vue-cli-service test:unit时会提示如下错误

TypeError: Mock.setup is not a function

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.