# 端對端測試
對于端到端測試,electron-vue 使用 [Spectron](http://electron.atom.io/spectron/) 和 測試框架 [Mocha](https://mochajs.org/) \(以及 [Chai](http://chaijs.com/)\)。Mocha 和 Chai 的 API (包括 `expect`、`should` 以及 `assert` 在內) 均在全局范圍內可用。
### 運行測試
```bash
# 開始 Mocha
npm run e2e
```
##### 注意
在運行端到端測試之前,為了使 Spectron 在測試的時候可用,請調用 `npm run pack` 來創建一個產品構建。
### 文件結構
```
my-project
├─ test
| ├─ e2e
│ │ ├─ specs/
│ │ ├─ index.js
└─ └─ └─ utils.js
```
**在大多數情況下,你可以忽略** `index.js` **,只專注于編寫** `specs/` **。**
#### `specs/`
這個目錄里面是編寫實際測試代碼的地方。由于 `babel-register` 的強大功能,你可以完全依照 ES2015 進行編寫。
#### `index.js`
這是 Mocha 入口文件,并收集加載在 `specs/` 內的所有測試代碼用于測試。
#### `utils.js`
在這里,你會發現一些通用的函數,你可以在 `specs/` 中使用。其基本功能包括處理 electron 創建/銷毀過程的 `beforeEach` 和 `afterEach`。
### 關于 Spectron
Spectron 是使用 [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) 和 [WebDriverIO](http://webdriver.io/) 來操作 DOM 元素的 [electron](http://electron.atom.io) 官方測試框架。
#### WebDriverIO 的使用
如 Spectron 的 [文檔](https://github.com/electron/spectron#client) 中所述,你可以通過訪問 `this.app.client` 來訪問 [WebDriverIO APIs](http://webdriver.io/api.html)。 由于 electron-vue 使用了 Mocha,`this` 在 `afterEach`、`beforeEach` 和 `it` 之間共享。 因此,值得注意的是,ES2015 的 箭頭函數 (arrow function) 不能在某些情況下使用,因為 `this` 的語境將被覆蓋 \([更多信息](https://mochajs.org/#arrow-functions)\)。