Vue項目總結(jié)(2)-前端獨立測試

前后端各自獨立開發(fā)的情況下,前端如何獨立后端服務(wù)做測試?如何搭建并使用API模擬服務(wù)?

新建測試項目

我們先創(chuàng)建一個VUE項目來展示這個問題。項目的功能就是調(diào)用/hello這個API返回一個JSON對象。

vue create try-mockapi

創(chuàng)建過程中建議單獨生成各個工具的配置文件。

Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? In dedicated config files

修改src/App.vue文件,去掉無關(guān)的代碼,添加API調(diào)用。

<template>
  <div id="app">
    <button @click="api">調(diào)用api</button>
  </div>
</template>

<script>
import axios from "axios"

export default {
  name: "app",
  methods: {
    api() {
      axios
        .get("/hello")
        .then(rsp => {
          alert(JSON.stringify(rsp.data))
        })
        .catch(err => {
          alert(err.message)
        })
    }
  }
}
</script>

執(zhí)行命令npm run serve,運行代碼。根據(jù)運行結(jié)果的提示,在瀏覽器中輸入地址。打開頁面后點擊【調(diào)用api】按鈕,系統(tǒng)提示錯誤。

Request failed with status code 404

訪問的地址是http://localhost:8080和運行前端代碼的server是同一個地址。

這就是前端開發(fā)通常碰到的問題,如果后端的代碼沒寫好,沒部署自己的代碼就跑起來,怎么辦?

問題分析

解決這個問題需要從兩個方面考慮:第一,搭建一個能夠提供API模擬服務(wù),能夠根據(jù)url返回測試數(shù)據(jù);第二,讓前端代碼發(fā)出的請求指到這個服務(wù)。

現(xiàn)在的API基本上都是返回JSON,所以模擬API服務(wù)就是要實現(xiàn)url到j(luò)son數(shù)據(jù)的映射。json-server這個項目很好地滿足了這個需求,項目簡介如下:

Get a full fake REST API with zero coding in less than 30 seconds (seriously)

后面我們再具體說明json-server的使用,先來分析第二個問題。

第二個問題就是把前端發(fā)出的請求轉(zhuǎn)發(fā)到API模擬服務(wù)上,無非兩種思路:1,在代碼中進(jìn)行指定,開發(fā)版本和生產(chǎn)版本指向不同的位置;2、將發(fā)出的請求通過代理改變指向。第1種思路會帶來CORS問題,雖然有解決的辦法,但是給我們的測試問題帶來了不必要的復(fù)雜性,因此,還是將解決方向定在思路2,進(jìn)行請求代理。

API模擬服務(wù)

postman模擬API

其實,在尋找API模擬服務(wù)方案時,首先研究的是postman。這個工具非常強大也非常成熟,其中提供了Mock Server這個功能模塊,解決模擬API問題。但是,免費賬號每個月只能進(jìn)行1000次調(diào)用,有這個限制就不好了,但是如果調(diào)用的次數(shù)不多,選用postman是個很好的選擇,所以這里也簡單把怎么用postman模擬API也介紹一下。

創(chuàng)建【Mock Server】。

image.png

創(chuàng)建要響應(yīng)的url(hello)

image.png

設(shè)置Mock Server的collection名(try-mockapi.my-postman)

image.png

點擊【Create Mock Server】后會獲得一個類似下面這個樣子的地址
https://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mock.pstmn.io,在瀏覽器中輸入自己的地址試試。

json-server模擬API

安裝

cnpm i json-server -D

在項目下創(chuàng)建放測試數(shù)據(jù)的目錄json-server,在目錄下創(chuàng)建文件db.json文件。

{
  "hello": {
    "id": 1,
    "msg": "你好,我是json-server"
  }
}

啟動模擬API服務(wù),通過參數(shù)指定測試數(shù)據(jù)的位置和服務(wù)的端口。

npx json-server json-server/db.json --port 4001

在瀏覽器中按提示輸入地址:http://localhost:4001/hello,可以看到已經(jīng)模擬出我們需要的API。

其實json-server是基于express,所以支持通過中間件(middleware)進(jìn)行擴展。

參考:https://www.npmjs.com/package/json-server

參考:https://dzone.com/articles/zero-code-rest-with-json-server

代理前端請求

現(xiàn)在模擬API服務(wù)已經(jīng)準(zhǔn)備好了,怎樣才能將API請求進(jìn)行轉(zhuǎn)發(fā)?

先看兩段VUE官網(wǎng)的文檔。

vue.config.js 是一個可選的配置文件,如果項目的 (和 package.json 同級的) 根目錄中存在這個文件,那么它會被 @vue/cli-service 自動加載。你也可以使用 package.json 中的 vue 字段,但是注意這種寫法需要你嚴(yán)格遵照 JSON 的格式來寫。

如果你的前端應(yīng)用和后端 API 服務(wù)器沒有運行在同一個主機上,你需要在開發(fā)環(huán)境下將 API 請求代理到 API 服務(wù)器。這個問題可以通過 vue.config.js 中的 devServer.proxy 選項來配置。

我們利用這個vue的機制進(jìn)行API的轉(zhuǎn)發(fā),創(chuàng)建或修改vue.config.js文件。

module.exports = {
  devServer: {
    proxy: "http://localhost:4001"
  }
}

執(zhí)行命令啟動應(yīng)用。

npm run serve

在瀏覽器中打開提供的地址,點擊【調(diào)用api】,返回結(jié)果。

{"id":1,"msg":"你好,我是json-server"}

更進(jìn)一步

通過前面的操作已經(jīng)能夠輕松實現(xiàn)模擬API服務(wù),前端不再依賴后端就可以進(jìn)行獨立的測試。但是,這里還有很大的探索空間。

更好地進(jìn)行測試數(shù)據(jù)模擬,可以研究一下faker,mockjs這些模塊。

如果API返回的數(shù)據(jù)和POST的內(nèi)容有關(guān),需要如何解決?json-server都是基于url匹配數(shù)據(jù),所以,可能需要通過中間件的方式進(jìn)行擴展。

這種方式高度依賴于nodejs,如果沒有nodejs的環(huán)境怎樣模擬API?

本系列其他文章:

Vue項目總結(jié)(1)-基本概念+Nodejs+VUE+VSCode

Vue項目總結(jié)(3)-前后端分離導(dǎo)致的跨域問題分析

Vue項目總結(jié)(4)-API+token處理流程

Vue項目總結(jié)(5)-表單組件基礎(chǔ)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、背景 前后端分離,在日常開發(fā)中,一直是開發(fā)人員的剛需。 作為前端,期望能夠在開發(fā)過程中,不依賴后臺接口的開發(fā)進(jìn)...
    南慕瑤閱讀 2,894評論 0 3
  • ??我們都知道,在現(xiàn)在流行的“前后端分離”架構(gòu)中,前后端的聯(lián)調(diào),是一個不能避免的問題,特別是在項目稍微有點規(guī)模之后...
    梓小魚的手記閱讀 2,700評論 0 7
  • 前言 在開始本文之前,需要聲明以下關(guān)鍵詞: 1.mock測試: mock測試就是在測試過程中,對于某些不容...
    apiaoqzh閱讀 788評論 0 1
  • 行情分析:BTC已經(jīng)穩(wěn)穩(wěn)的站在6600美金上方,今天最高上沖到6839美金,現(xiàn)在回落到6690美金左右,從4H周期...
    二妹說事閱讀 379評論 0 0
  • 曾經(jīng)媽媽說不讓我早戀 于是我很乖 并沒有亂來 而如今而立之年 媽媽說要我早點成家 我想對媽媽說 我已經(jīng)有愛情 只不...
    半個月亮夭折了閱讀 223評論 0 0

友情鏈接更多精彩內(nèi)容