168 lines
3.7 KiB
TypeScript
168 lines
3.7 KiB
TypeScript
declare namespace NodeJS {
|
||
interface Global {
|
||
wx: Object;
|
||
}
|
||
}
|
||
|
||
const wx = {
|
||
// mock 状态
|
||
__mock__: {
|
||
// 当前toast是否展示
|
||
toastIsShow: false,
|
||
// 当前modal是否展示
|
||
modalIsShow: false,
|
||
// storage 内容
|
||
storage: {},
|
||
},
|
||
setStorage: jest.fn((options) => {
|
||
if (options.key && options.data) {
|
||
wx.__mock__.storage[options.key] = options.data;
|
||
}
|
||
}),
|
||
getStorageSync: jest.fn((options) => wx.__mock__.storage[options]),
|
||
getStorage: jest.fn((options) => {
|
||
if (options.key && options.success && wx.__mock__.storage[options.key]) {
|
||
return options.success({ data: wx.__mock__.storage[options.key] });
|
||
}
|
||
}),
|
||
removeStorage: jest.fn((options) => {
|
||
if (options.key) {
|
||
delete wx.__mock__.storage[options.key];
|
||
}
|
||
}),
|
||
showModal: jest.fn(() => {
|
||
wx.__mock__.modalIsShow = true;
|
||
}),
|
||
showToast: jest.fn(() => {
|
||
wx.__mock__.toastIsShow = true;
|
||
}),
|
||
hideToast: jest.fn(() => {
|
||
wx.__mock__.toastIsShow = false;
|
||
}),
|
||
login: jest.fn((obj) => {
|
||
if (typeof obj.success === "function") {
|
||
obj.success({ code: "js_code_xxxxxxxx" });
|
||
}
|
||
if (typeof obj.complete === "function") {
|
||
obj.complete();
|
||
}
|
||
}),
|
||
checkSession: jest.fn((obj) => {
|
||
if (typeof obj.fail === "function") {
|
||
obj.fail();
|
||
}
|
||
}),
|
||
request: jest.fn((obj) => {
|
||
return new Promise((resolve, reject) => {
|
||
process.nextTick(() => {
|
||
const url = new URL(obj.url);
|
||
const response = httpResponse[url.pathname];
|
||
if (response && response.hasOwnProperty("statusCode")) {
|
||
if (typeof obj.success === "function") {
|
||
obj.success(response);
|
||
}
|
||
resolve(response);
|
||
} else {
|
||
if (typeof obj.fail === "function") {
|
||
obj.fail(response);
|
||
}
|
||
reject(response);
|
||
}
|
||
if (typeof obj.complete === "function") {
|
||
obj.complete();
|
||
}
|
||
});
|
||
});
|
||
}),
|
||
uploadFile: jest.fn((obj) => {
|
||
return new Promise((resolve, reject) => {
|
||
process.nextTick(() => {
|
||
const url = new URL(obj.url);
|
||
const response = httpResponse[url.pathname];
|
||
if (response.hasOwnProperty("statusCode")) {
|
||
if (typeof obj.success === "function") {
|
||
obj.success(response);
|
||
}
|
||
resolve(response);
|
||
} else {
|
||
if (typeof obj.fail === "function") {
|
||
obj.fail(response);
|
||
}
|
||
reject(response);
|
||
}
|
||
if (typeof obj.complete === "function") {
|
||
obj.complete();
|
||
}
|
||
});
|
||
});
|
||
}),
|
||
};
|
||
|
||
/** 根据不同的请求pathname,mock返回的内容 */
|
||
const httpResponse = {
|
||
"/success": {
|
||
statusCode: 200,
|
||
errMsg: "request:ok",
|
||
header: {},
|
||
data: {
|
||
errcode: 0,
|
||
data: {
|
||
isSuccess: true,
|
||
},
|
||
},
|
||
},
|
||
"/successButNotJson": {
|
||
statusCode: 200,
|
||
errMsg: "request:ok",
|
||
header: {},
|
||
data: `{
|
||
"errcode": 0,
|
||
"data": {
|
||
"isSuccess": true
|
||
}
|
||
}`,
|
||
},
|
||
"/sessionExpired": {
|
||
statusCode: 200,
|
||
errMsg: "request:ok",
|
||
header: {},
|
||
data: {
|
||
errcode: -1,
|
||
data: {
|
||
},
|
||
},
|
||
},
|
||
"/cgiError": {
|
||
statusCode: 200,
|
||
errMsg: "request:ok",
|
||
header: {},
|
||
data: {
|
||
errcode: -100,
|
||
msg: "业务错误提示",
|
||
data: {},
|
||
},
|
||
},
|
||
"/code2Session": {
|
||
statusCode: 200,
|
||
errMsg: "request:ok",
|
||
header: {},
|
||
data: {
|
||
errcode: 0,
|
||
data: {
|
||
sid: "sid",
|
||
},
|
||
},
|
||
},
|
||
"/httpError": {
|
||
statusCode: 500,
|
||
errMsg: "request:ok",
|
||
header: {},
|
||
data: "",
|
||
},
|
||
"/networkError": {
|
||
errMsg: "request:fail Failed to execute 'send' on 'XMLHttpRequest'",
|
||
},
|
||
};
|
||
|
||
global.wx = wx;
|