当前位置:   article > 正文

Mock的基本使用以及使用场景_mock使用

mock使用

目录

一、为什么要使用mock? 

二、mock的基本使用

(一) 在原生JS中使用mock

 (二) 在vue组件中简单测试mock的使用

(三) 在vuex中使用mock


序言:

最近在写一个vue的demo,但是又没有后端的接口,在写首页三级分类列表的时候,并没有把三级分类列表写成静态的,而是使用mock模拟了假的接口,然后通过axios发送GET请求获取到了这个模拟的数据并渲染到页面上。


一、为什么要使用mock? 

最主要的原因是在开发中,前后端开发的进度并不一定是同步的,如果前端开发的小伙伴想要后端接口数据进行测试,刚好后端还没有这个接口数据,那么这个时候前端的小伙伴就可以使用mock模拟接口数据。这样,我们就可以在没有真实数据的情况下测试我们的代码。

其它原因:

  1. 提高测试覆盖率:Mock可以帮助我们测试一些难以在真实数据源中复现的情况,这样就可以提高测试覆盖率并发现代码中的潜在问题。

  2. 快速测试反馈:使用Mock可以在不用等待真实数据源响应的情况下快速得到测试反馈。这有助于加速我们的开发和测试过程。

  3. 模拟错误情况:Mock可以模拟各种错误情况,比如网络错误,数据格式错误等,以测试我们的代码在这些情况下的表现。

  4. 方便调试:使用Mock可以方便地模拟各种数据源的响应,以便进行调试。这可以让我们更快地发现和解决问题。

二、mock的基本使用

官网:Mock.js (mockjs.com)http://mockjs.com/

(一) 在原生JS中使用mock

1.新建一个mock.html文件

 2.通过在线的方式在mock.html中引入mock-min.js和axios.js

网址:BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务icon-default.png?t=N3I4https://www.bootcdn.cn/

  1. <script src="https://cdn.bootcdn.net/ajax/libs/Mock.js/1.0.0/mock-min.js"></script>
  2. <script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.js"></script>

3.定义一个数据,并使用mock提供的方法模拟接口,然后使用axios发送请求获取数据。

  1. <script>
  2. var Random = Mock.Random;
  3. const mockPersonData = {
  4. status: 200,
  5. message: "成功!",
  6. data: [
  7. {
  8. name: "Jack",
  9. age: 18,
  10. gender: "男",
  11. "address|1": {
  12. 310000: "上海市",
  13. 320000: "江苏省",
  14. 330000: "浙江省",
  15. 340000: "安徽省",
  16. },
  17. },
  18. {
  19. name: Random.cname(),
  20. age: 18,
  21. gender: "男",
  22. address: "上海市",
  23. },
  24. {
  25. name: Random.cname(),
  26. age: 18,
  27. gender: "男",
  28. address: Random.county(),
  29. },
  30. ],
  31. };
  32. Mock.mock("mock/data", mockPersonData);
  33. // 获取数据
  34. axios({
  35. url: "mock/data",
  36. }).then((res) => {
  37. console.log(res);
  38. });
  39. </script>

 4.查看接口数据

 (二) 在vue组件中简单测试mock的使用

1.下载依赖包

  1. npm i mockjs --save
  2. npm i axios

2.定义mock规则

    在src文件夹下定义一个mock文件夹并定义一个index.js文件,用来定义mock规则

 

3.设计一个json格式的首页三级分类列表的接口数据BaseCategoryList

 4.定义mock接口,并引入定义的json数据,在main.js文件中引入mock/index.js

  1. import Mock from "mockjs";
  2. import BaseCategoryList from "./BaseCategoryList.json";
  3. // 模拟分类列表数据接口
  4. Mock.mock("/mock/BaseCategoryList", "get", {
  5. code: 200,
  6. message: "获取数据成功!",
  7. data: BaseCategoryList,
  8. });

5.定义一个mockAjax.js文件,对axios进行简单的二次封装,用于发送ajax请求

  1. // mock接口请求的封装 要拦截Ajax请求
  2. import axios from "axios";
  3. const service = axios.create({
  4. baseURL: "/mock",
  5. timeout: 20000,
  6. });
  7. service.interceptors.request.use((config) => {
  8. return config;
  9. });
  10. service.interceptors.response.use(
  11. (response) => {
  12. return response.data;
  13. },
  14. (error) => {
  15. alert("请求出错: " + error.message || "未知错误");
  16. return Promise.reject(error);
  17. }
  18. );
  19. export default service;

6.在vue组件中引入mockAjax,发送请求获取模拟接口的数据 

  1. <template>
  2. <el-row>
  3. <el-button type="success" round @click="getData">获取数据</el-button>
  4. </el-row>
  5. </template>
  6. <script>
  7. import mockAjax from '../api/mockAjax.js'
  8. export default {
  9. name: 'HelloWorld',
  10. props: {
  11. msg: String
  12. },
  13. methods: {
  14. getData() {
  15. mockAjax.get('/BaseCategoryList').then(res => {
  16. console.log(res);
  17. })
  18. }
  19. },
  20. }
  21. </script>

 7.发送请求,查看模拟的接口数据

 

(三) 在vuex中使用mock

        下载依赖包

  1. npm i mockjs --save
  2. npm i axios

(1)定义一个mock文件夹并定义一个mockServer.js文件,用来定义mock规则

(2)设计一个json格式的首页三级分类列表的接口数据BaseCategoryList

 (3)在定义这个接口规则的时候引入自己设计的json格式的接口数据

  1. //使用ES6模块化的方法引入mock模块
  2. import Mock from 'mockjs'
  3. //引入自己设计的json格式的接口数据
  4. import BaseCategoryList from './BaseCategoryList.json'
  5. Mock.mock('/mock/BaseCategoryList',{
  6. code:200,
  7. data:BaseCategoryList
  8. //也可以定义简单的数据
  9. //data: ['数据', '数据', '数据',...]
  10. })

(4)新建一个mockAjax.js文件对axios进行简单的二次封装

  1. // mock接口请求的封装 要拦截Ajax请求
  2. import axios from 'axios'
  3. // 引入进度条包
  4. import NProgress from 'nprogress'
  5. import 'nprogress/nprogress.css'
  6. // 1. 配置通用的基础路径和超时
  7. // service是一个能发任意ajax请求的函数,当然可以作为对象使用
  8. const service = axios.create({
  9. baseURL: '/mock',
  10. timeout: 20000
  11. })
  12. // 定义请求拦截器
  13. service.interceptors.request.use((config) => {
  14. // 显示进度条: 请求拦截器回调
  15. NProgress.start()
  16. return config
  17. })
  18. // 定义响应拦截器
  19. service.interceptors.response.use(
  20. response => {
  21. // 结束进度条: 响应拦截器回调
  22. NProgress.done()
  23. return response.data //发送请求时response就可以拿到数据 而不用response.data拿数据了
  24. },
  25. error => {
  26. // 结束进度条: 响应拦截器回调
  27. NProgress.done()
  28. // 统一处理请求错误, 具体请求也可以选择处理或不处理
  29. alert('请求出错: ' + error.message||'未知错误')
  30. // 将错误向下传递 发起请求时就可以接收到这个错误 可以用catch处理一下,也可以不处理
  31. return Promise.reject(error)
  32. }
  33. )
  34. export default service

(5)使用vuex管理请求到的接口数据

  1. // 1.定义首页三级分类接口请求函数
  2. export const reqBaseCategoryList = () => {
  3. return mockAjax('/BaseCategoryList')
  4. }
  1. const state = {
  2. BaseCategoryList: [], // 3级分类列表
  3. }
  4. const actions = {
  5. //1.获取三级分类列表的异步action
  6. async getCategoryList(context) {
  7. //发异步ajax请求(调用接口请求函数)
  8. const result = await reqBaseCategoryList()
  9. //如果请求成功了,得到数据提交给mutation
  10. if (result.code === 200) {
  11. const BaseCategoryList = result.data
  12. // 把从服务器获取的数据发送到mutations进行处理
  13. context.commit('RECEIVE_CATEGORY_LIST', BaseCategoryList)
  14. }
  15. },
  16. }
  17. const mutations = {
  18. // 1.获取三级分类列表
  19. RECEIVE_CATEGORY_LIST(state, BaseCategoryList) {
  20. // 把获取的数据保存到state
  21. state.BaseCategoryList = BaseCategoryList
  22. },
  23. }

(6)在需要使用这个接口数据的组件中的mounted钩子中分发这个异步action

  1. mounted(){
  2. // 1.分发请求获取三级分类列表的异步action
  3. this.$store.dispatch('getCategoryList')
  4. }
  1. computed:{
  2. //从vuex中取出数据
  3. ...mapState({
  4. BaseCategoryList:state=>state.home.BaseCategoryList //函数形式
  5. })
  6. },

(4)在Vue DevTools中差查看请求数据

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/477182
推荐阅读
相关标签
  

闽ICP备14008679号