---
# System prepended metadata

title: JS筆記 jest (上)

---

# JS筆記 jest (上)

首先創出package.json
```
$ yarn init -y
```
安裝jest
```
$ yarn add --dev jest
```
安裝完後，在package.json內加上
```
"scripts": {
    "test": "jest"
  }
```
測試的原則- 3A 原則：  Arrange 、 Act 、 Assert

Arrange 初始化

Act 行為

Assert 測試結果

這邊用從銀行取錢當例子

首先創出兩個js檔案
bank.js 寫function
bank.test.js寫測試

測試的規格:
```
存錢功能：

1.  可以存錢
2.  不可以存 0 元或是小於 0 元的金額（越存錢越少！
3.  領錢功能
4.  可以領錢
5.  不能領 0 元或是小於 0 元的金額（越領錢越多！
6.  不能領超過本身餘額
```


---

Arrange 初始化，創一個銀行賬號，使用BankAccount方法創一個新的account（帳號），內有５元

*bank.test.js*
```
test("存錢功能",()=>{
    const account = new BankAccount(5)
})
```

---

在*bank.test.js*最上面加上，從bank.js引入function
```
const BankAccount = require('./bank');
```
並且在*bank.js*加上


```
module.exports = BankAccount
```


---

*bank.test.js*

Act 行為，這裡再設一個方法deposit代表著存錢這個行為，往account裡面存10元
```javascript
const BankAccount = require('./bank');
test("存錢功能",()=>{
    const account = new BankAccount(5)
    account.deposit(10)
})
```


---
*bank.test.js*

 Assert 測試結果，測試account的結餘balance應該有多少錢（值）？原有5元，存入10元，因此裡面應該要有15元
```javascript
const BankAccount = require('./bank');
test("存錢功能",()=>{
    const account = new BankAccount(5)
    account.deposit(10)
    expect(account.balance).toBe(15);
})
```


---
*bank.js*
```javascript
class BankAccount {
    constructor(){     
    }
    deposit(){}
    get balance(){
        return 15
    }
}
module.exports = BankAccount
```
這裡只求先通過第一個測試，get會將物件屬性，綁定到屬性被檢索時，所呼叫的函式。所以會回傳出15給測試。

運行測試
```
$yarn run test
```
![](https://i.imgur.com/Zh20tu2.png)

會看到通過測試，ＰＡＳＳ

