Now I'm working at Bytedance Ltd as a web frontend developer.
Languages and Tools:
Forked from Mockjs, Generate random data & Intercept ajax request. Support miniprogram.
Home Page: http://lavyun.gitee.io/better-mock/
License: MIT License
怎么在app中使用better-mock ,在H5中和小程序中都可以运行,app中不行,是少了什么步骤吗,还是不支持(我是用的是uniapp😁)
问题简述
使用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;
问题简述
使用axios上传文件,添加onUploadProgress会导致报错request.upload.addEventListener is not a function
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
VM482 WAService.js:1 Uncaught TypeError: Cannot read property 'ActiveXObject' of undefined
问题简述
valid(temp,data)方法,当temp方法里存在占位符,valid()一直返回通过
复现步骤
var template = {
type: "@pick(['number','datetime','string'])"
}
var data = {
type: 123
}
const rst = Mock.valid(template, data)
// rst输出 []
期望结果
type字段不符合
由于 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;
以上
谢谢
描述一下你期望的新特性
类似 https://github.com/marak/Faker.js/, 可以设置locale.
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"
Argument of type 'typeof Mock' is not assignable to parameter of type 'Plugin_2'. Property 'install' is missing in type 'typeof Mock' but required in type '{ install: PluginInstallFunction; }'.
不要拦截所有http请求,拦截指定的url。
例如该Issue:nuysoft/Mock#364
问题简述
使用过程中发现生成的图片不支持中文标注,如下
https://dummyimage.com/600x400/cc00cc/470047.png&text=导入图片
期望结果
建议改成 https://tool.lu/imageholder 图片生成源, 对中文更友好,如下
问题简述
含 @
符号的 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
期望结果
不报错
截图
无
环境
请描述一下你的代码运行环境。
Mock.mock({
a: 134,
b: {
c(){
return // 如何在此函数获取 a
}
}
})
您好,请教一个问题,我使用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
问题简述
返回 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 返回正确的结果
环境
请描述一下你的代码运行环境。
当前的版本不支持node v14 node v16的linux prebuilt。
因此要使用node-gyp,对于环境要准备python3,有点麻烦。
看了下依赖包,promise-synchronizer这个库依赖了deasync导致的
H5/移动app 中经常要验证对emoji 表情的支持情况,希望能加入 emoji 的mock功能,例如:
Random.emoji() //😀
Random.emoji(5) //😀😁😂😃😄
Random.emoji(2, 5) //😀😁😂
我也有fork的 想法,比如添加Mock.gen( ) 方法,丰富 imageData 的参数等
mock可以拦截请求,模拟数据都是好的。
项目中很多时候会需要模拟文件流的情况,mock返回的是json字符串,将文件流破坏了,要是可以拦截下载的请求,模拟文件流回传会更出彩。当然,文件可以本地的某特殊文件,word,excel,test,zip,image等
先判断真实接口是否有返回,没有的使用Mock数据,要如何实现?
问题简述
这是 mockjs 就存在的问题,目前我们项目也遇到了。
复现步骤
https://www.jianshu.com/p/37ded5f2fdac
https://segmentfault.com/q/1010000014704618
期望结果
我们目前在代码里面添加这一行解决了
参考这里的
https://segmentfault.com/q/1010000014704618
截图
axios.post('/api/file/xxx', data, { responseType: 'blob' })
环境
请描述一下你的代码运行环境。
描述一下你期望的新特性
希望增加对 weex stream 的支持,uniapp 编译成 app 时请求是这个模块发的
问题简述
应用后拦截了所有接口请求且获取不到数据,返回:
[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);
}
期望有小伙伴能帮助解决~
描述一下你期望的新特性
希望能够支持返回 promise,参考 mockjs-async
描述一下你期望的新特性
建议在官网文档中全局添加 better-mock js, 这样方便打开浏览器进行测试。
虽然文档上提供【练习】页面, 但控制台依然是一种方便的选择.
描述一下你期望的新特性
目前只能拦截uni.request发出的请求,无法拦截uni-app著名组件库uView封装的ajax请求,希望能实现拦截uView封装的ajax。
uView的github地址 https://github.com/YanxinNet/uView
封装ajax的文件路径
uview-ui/libs/request/index.js
Could not find a declaration file for module 'better-mock/dist/mock.mp.js'. 'C:/Codes/WorkNowCodes/miniprograme/ordermeuniapp/node_modules/better-mock/dist/mock.mp.js' implicitly has an 'any' type. Try
npm install @types/better-mock if it exists or add a new declaration (.d.ts) file containing declare module 'better-mock/dist/mock.mp.js';
怎么解决啊?
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.
添加生成后的数据类型转换规则
很多时候我们知道数据的类型, 例如使用正则可以方便的创建想要的数据格式, 但目前没有找到方便的类型转换方式。
例如: @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
复现步骤
Mock.mock({
"data|1": [
{
"name": "@cname",
"title": "@name",
}
]
}).data
使用 [email protected] 来运行以上代码也是一样.
期望结果
环境
请描述一下你的代码运行环境。
问题简述
@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
环境
我看到使用了 jimp 并且因为需要同步调用,使用了promise-synchronizer
这个会有些问题,在 worker_threads 中会导致一直pending状态,建议换回原版的node-canvas
问题简述
如果当前键的 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
环境
描述一下你期望的新特性
建议与mockjs 作者联系,然后在其 readme 增加 better-mock 的链接,让这个项目让更多同学看到
👍
问题简述
参考 #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 之间
环境
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.