iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 19
3
Modern Web

Vue 怎麼寫測試系列 第 19

Day 19. 實作一個電商網站 - 專案建置

  • 分享至 

  • xImage
  •  

前言

這次的專案要做一個電商的網站,主要幾個核心功能是一定要實作的,包括購物車、分類頁、產品頁、結帳金流,這讓我有想把接下來 11 天全部實作這個網站就好。不然時間上會太緊迫

老實說,我工作時都是用 php 或 ruby, 在 nuxt + vue 這方面完全是生手,所以你們現在看到的鐵人賽文章全部都是現學現賣。但我個人很喜歡這種挑戰的感覺,看看我們可以一起承受壓力走多遠。另外我也希望我學習的過程可以提供讀者開發上的幫助。

安裝環境

Nuxt 的安裝就不用多說了,我們已經用過 vue-cli
只要挑個 nuxt 提供個 template 裝好就好
https://github.com/nuxt-community/starter-template

vue init nuxt-community/starter-template ecommerce
cd ecommerce
npm install
npm run dev

至於資料夾的結構
我們只關心兩個
components/
test/ -> 這個 start-template 並沒有整合

也由於 Nuxt 的 starter-template 並沒有支援寫測試的環境,那我們就來自己裝一個

去我們前一個專案偷一份當然是最快的,我們快速複製幾個設定檔到 nuxt
test/setup.js
test/jest.conf.js
test/assert.transform.js

jest.conf.js 這個檔案要修改幾個地方
第一個是 rootDir
然後是 Nuxt 的 root 是用 ~ 符號不是 @
再來是 codecoverage 地方我們先一概不要
然後路徑有包含 node_modules 的全部 npm i -D 裝一遍

就是這幾個

devDependencies": {
    "babel-jest": "^22.0.4",
    "jest": "^22.0.4",
    "jest-serializer-vue": "^0.3.0",
}
const path = require('path')

module.exports = {
  rootDir: path.resolve(__dirname, '../'),
  moduleFileExtensions: [
    'js',
    'json',
    'vue'
  ],
  moduleNameMapper: {
    '^~/(.*)$': '<rootDir>/$1'
  },
  transform: {
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      '<rootDir>/test/assets.transform.js',
    '^.+\\.js$': '<rootDir>/node_modules/babel-jest',
    '.*\\.(vue)$': '<rootDir>/node_modules/vue-jest'
  },
  snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
  setupFiles: ['<rootDir>/test/setup']
}

再來新增一個 npm run-script
test 和 unit
https://ithelp.ithome.com.tw/upload/images/20180105/20104476xehHxKhk6U.png

準備一個簡單的 spec 來跑跑看
https://ithelp.ithome.com.tw/upload/images/20180105/20104476tlZK3Vy7O9.png

然後跑 npm run test 的時候
會噴一對看著就揪心的錯誤

第一個是會跳 unexpect token import
這個是代表我們的 setup.js 裡面的 import 關鍵字 node 看不懂
我們需要萬能的 babel

把前一個專案的 .babelrc copy 過來
或是直接用我貼的

{
  "presets": [
    ["env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
      }
    }],
    "stage-2"
  ],
  "plugins": ["transform-vue-jsx", "transform-runtime"],
  "env": {
    "test": {
      "presets": ["env", "stage-2"],
      "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"]
    }
  }
}

在跑一次 npm run test,會跳錯誤說有些 modules 找不到
就用 npm i -D 裝一裝

"devDependencies": {
    "babel-plugin-dynamic-import-node": "^1.2.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-stage-2": "^6.24.1",
    "vue-jest": "^1.4.0",
    "vue-test-utils": "^1.0.0-beta.9"
}

這之後 npm run test 就可以使用了,打完收工。
git 傳送門:https://github.com/MOSapeizer/vue-ecommerce


上一篇
Day 18. 實作一個 reddit - 第一個實作結束
下一篇
Day 20. 實作一個電商網站 - 產品頁
系列文
Vue 怎麼寫測試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言