0 purchases
dio mock interceptor
Flutter Dio Mock Interceptor #
This widget help you to mock backend responses in flutter project.
Environment #
The widget was only tested on following environment,
Flutter: 3.7.5+ (with sound null safety)
Dio: 5.0.0+
Usage #
Install:
dev_dependencies:
dio_mock_interceptor: ^2.1.0
copied to clipboard
Create a mock folder in your project, add json files to mock http responses,
example:
[
{
"path": "/api/basic/data",
"method": "POST",
"statusCode": 200,
"data": {
"success": true,
"code": "0000",
"result": {
"test": "test"
}
}
},
{
"path": "/api/basic/data/empty",
"method": "POST",
"statusCode": 200,
"data": {}
}
]
copied to clipboard
Setup mock folder to assets section of pubspec.yaml:
assets:
- mock/
copied to clipboard
Add interceptor to Dio:
import 'package:dio_mock_interceptor/dio_mock_interceptor.dart';
dio.interceptors.add(MockInterceptor());
copied to clipboard
Dio post example:
Response response = await dio.post("/api/basic/data");
String json = response.data;
if (json.isEmpty) {
throw Exception('response is empty');
}
Map<String, dynamic> data = jsonDecode(json);
bool isSuccess = data['success'] as bool; // true
Map<String, dynamic> result = data['result']; // result['test'] = 'test'
copied to clipboard
Template example:
[
{
"path": "/api/template/without-data-block",
"method": "POST",
"statusCode": 200,
"template": {
"size": 100000,
"content": {
"id": "test${index}",
"name": "name_${index}"
}
}
},
{
"path": "/api/template/with-data-block",
"method": "POST",
"statusCode": 200,
"data": {
"id": "yong-xin",
"listA": "${template}"
},
"template": {
"size": 1000,
"content": {
"id": "test${index}",
"name": "name_${index}"
}
}
},
{
"path": "/api/template/with-data-block/ex2",
"method": "POST",
"statusCode": 200,
"data": {
"id": "yong-xin",
"listA": "${template}",
"field2": {
"listB": "${template}"
}
},
"template": {
"size": 1000,
"content": {
"id": "test${index}",
"name": "name_${index}"
}
}
},
{
"path": "/api/templates/ex1",
"method": "POST",
"statusCode": 200,
"data": {
"id": "yong-xin",
"listA": "${templates.name1}",
"field": {
"listB": "${templates.name2}"
}
},
"templates": {
"name1": {
"size": 1000,
"content": {
"id": "test${index}",
"name": "name_${index}"
}
},
"name2": {
"size": 10,
"content": {
"id": "test2${index}",
"name": "name2_${index}"
}
}
}
}
]
copied to clipboard
Expression example:
[
{
"path": "/api/expression/req-data",
"method": "POST",
"statusCode": 200,
"data": {
"id": "yong-xin",
"desc": "Hi ${req['data']['name']}, I am ${req['data']['name2'] + '_varSuffix'}",
"desc2": "test header, ${req['headers']['content-type']}",
"desc3": "test queryParameter, ${req['queryParameters']['name3']}",
"desc4": "test baseUrl, ${req['baseUrl']}",
"desc5": "test method, ${req['method']}",
"desc6": "test path, ${req['path']}"
}
},
{
"path": "/api/expression/req-data/form-data",
"method": "POST",
"statusCode": 200,
"data": {
"desc": "Hi ${req['data']['name']}, test date: ${req['data']['date']}"
}
},
{
"path": "/api/expression/vars",
"method": "POST",
"statusCode": 200,
"data": {
"id": "yong-xin",
"listA": "${templates.name1}",
"field": {
"listB": "${templates.name2}"
},
"arry": "${groups}",
"objA": "${obj}"
},
"vars": {
"n": 5,
"groups": [
"May",
"YongXin",
"John"
],
"obj": {
"name": "objName"
}
},
"templates": {
"name1": {
"size": 1000,
"content": {
"id": "test${index}",
"group": "g_${groups[index%3]}",
"name": "name_${index}",
"req-data-name": "test_${req['data']['name']}"
}
},
"name2": {
"size": 10,
"content": {
"id": "test2${index}",
"name": "name2_${index}"
}
}
}
},
{
"path": "/api/expression/vars/template-ex",
"method": "POST",
"statusCode": 200,
"data": {
"id": "yong-xin",
"listA": "${template}"
},
"vars": {
"n": 5,
"groups": [
"May",
"YongXin",
"John"
],
"obj": {
"name": "objName"
}
},
"template": {
"size": 1000,
"content": {
"id": "test${index}",
"group": "g_${groups[index%3]}",
"name": "name_${index}",
"req-data-name": "test_${(req['data']['name'].contains('Mercury')? 'a':'b')}"
}
}
}
]
copied to clipboard
License #
Copyright (c) 2023-present Yong-Xin Technology Ltd.
This project is licensed under the MIT License - see the LICENSE file for details.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.