move book to kou029w/jest-hands-on

see also https://kou029w.github.io/jest-hands-on/
This commit is contained in:
Nebel 2022-02-24 17:12:42 +09:00
parent 1a1447bc30
commit dc7e6a6649
17 changed files with 7 additions and 727 deletions

View file

@ -9,26 +9,15 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with: { node-version: lts/*, cache: yarn }
- id: brew_cache
run: echo "::set-output name=dir::$(brew --cache)"
- uses: actions/cache@v2
with:
path: ${{ steps.brew_cache.outputs.dir }}
key: brew-${{ hashFiles('**/Brewfile.lock.json') }}
restore-keys: brew-
- name: Git config
run: |
git config user.name bot
git config user.email bot@example
git subtree add --prefix pages origin gh-pages
- name: Build pages
- name: Build
run: |
yarn install
yarn build
- name: Build book
run: |
brew bundle
mdbook build
- name: Publish
run: |
git add -f pages

View file

@ -1 +0,0 @@
brew "mdbook"

View file

@ -1,55 +0,0 @@
{
"entries": {
"brew": {
"mdbook": {
"version": "0.4.15",
"bottle": {
"rebuild": 0,
"root_url": "https://ghcr.io/v2/homebrew/core",
"files": {
"arm64_monterey": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mdbook/blobs/sha256:ce829c6916e6e0e92b87fc7b50d32717e425a34daeb599e91de63e82490139c5",
"sha256": "ce829c6916e6e0e92b87fc7b50d32717e425a34daeb599e91de63e82490139c5"
},
"arm64_big_sur": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mdbook/blobs/sha256:b5567150ceb34975ac1410a06d36a92652e37ededcf77bcc1487afe77b9669ec",
"sha256": "b5567150ceb34975ac1410a06d36a92652e37ededcf77bcc1487afe77b9669ec"
},
"monterey": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mdbook/blobs/sha256:275537af633a8a359d7109a0777c535ae1b2e36a07566c49b021589e8a8bfcf5",
"sha256": "275537af633a8a359d7109a0777c535ae1b2e36a07566c49b021589e8a8bfcf5"
},
"big_sur": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mdbook/blobs/sha256:f7ea2bc7a6bb74fade5123e1e4523e1f49addca4730b5e61d66bb13feddf2e83",
"sha256": "f7ea2bc7a6bb74fade5123e1e4523e1f49addca4730b5e61d66bb13feddf2e83"
},
"catalina": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mdbook/blobs/sha256:a8a40fb27378a45e8543072fdb73036e6977d634d3d974834fa1208daca054a1",
"sha256": "a8a40fb27378a45e8543072fdb73036e6977d634d3d974834fa1208daca054a1"
},
"x86_64_linux": {
"cellar": ":any_skip_relocation",
"url": "https://ghcr.io/v2/homebrew/core/mdbook/blobs/sha256:7e8a47e663ef70129e878cff9c43336e37d50739847cd2222995fedd5b684bd4",
"sha256": "7e8a47e663ef70129e878cff9c43336e37d50739847cd2222995fedd5b684bd4"
}
}
}
}
}
},
"system": {
"linux": {
"Ubuntu 20.04.4 LTS (focal)": {
"HOMEBREW_VERSION": "3.3.16-15-g6661f5b",
"HOMEBREW_PREFIX": "/home/linuxbrew/.linuxbrew",
"Homebrew/linuxbrew-core": "f9808921157b103d2499601d1b660fbcea526749",
"GCC": "9.3.0"
}
}
}
}

View file

@ -267,7 +267,7 @@ $ npx playwright test # テストの実行
---
## ここまでのまとめ
## まとめ
- 何を・どうやってテストするのか
- テストピラミッド … コストに応じた適切な粒度と規模を保つ
@ -275,9 +275,13 @@ $ npx playwright test # テストの実行
---
# ハンズオン
---
## Jestではじめるテスト
https://kou029w.github.io/intro-to-software-testing/book/
https://kou029w.github.io/jest-hands-on/
---

View file

@ -1,12 +0,0 @@
[book]
language = "ja"
title = "Jestではじめるテスト"
authors = ["Kohei Watanabe"]
[build]
build-dir = "pages/book"
[output.html]
site-url = "/intro-to-software-testing/book/"
git-repository-url = "https://github.com/kou029w/intro-to-software-testing"
edit-url-template = "https://github.com/kou029w/intro-to-software-testing/edit/main/{path}"

View file

@ -1,17 +0,0 @@
# Jestではじめるテスト
## ローカル環境でのビルド
### 前提
- Ubuntu 20.04 LTS
- Homebrew
### 手順
下記のコマンドを実行すると `pages/book` ディレクトリ以下にファイルが生成されます。
```sh
brew bundle
mdbook build
```

View file

@ -1,12 +0,0 @@
# 目次
- [Jestではじめるテスト](basic.md)
- [Jestとは](about-jest.md)
- [事前準備](preparation.md)
- [はじめてのテスト](getting-started.md)
- [基本的な機能](basic-jest-api.md)
- [ECMAScriptモジュールのテスト ―― Babelの設定](esm.md)
- [テストの実践 ――「うるう年」問題](practices.md)
- [テストの作法](test-writing-style.md)
- [Jestの機能](jest-api.md)
- [質問・提案・問題の報告](issues.md)

View file

@ -1,12 +0,0 @@
# Jestとは
Jest公式サイト: [https://jestjs.io/ja](https://jestjs.io/ja)
Jestは、JavaScriptのテストを行うためのフレームワークです。
Facebookによってメンテナンスを続けられており、2022年現在でもJavaScriptを使用する多くの開発者が使用している人気のツールです。
> ![2021.stateofjs.com ランキング](https://i.gyazo.com/c2b2c4a6111af6aa960f71bbadd4b5ef.png)
>
> ―― 画像の出典: [2021.stateofjs.com](https://2021.stateofjs.com/ja-JP/libraries/testing/)
少ない設定で簡単にテストをはじめることができます。

View file

@ -1,49 +0,0 @@
# 基本的な機能
Jestの機能について説明します。
## テストファイルの検出
Jestは、デフォルトで下記のファイルをテストファイルとして検出します。
- `.test.js` ファイル
- `.test.ts` ファイル
- `.spec.js` ファイル
- `.spec.ts` ファイル
- `__tests__` ディレクトリ以下の `.js``.ts``.jsx``.tsx` ファイル
## テストの自動監視
`--watch` オプションを指定することで、テストファイルの変更を自動で監視します。
```bash
npx jest --watch
```
終了するには、キーボードの `q` を押します。
## プロジェクトでのテストコマンドの設定
この設定を行うと、`npm test` コマンドでJestを実行できるようになります。
```bash
npm set-script test jest
```
実行すると、`package.json` には下記のような設定が追加されます。
```json
{
"scripts": {
"test": "jest"
}
}
```
NPMコマンドでのテストの実行:
```bash
npm test
```
`npx jest` コマンドの実行と同様のテスト結果が得られます。

View file

@ -1,7 +0,0 @@
# Jestではじめるテスト
本文書は、Jestを使ってテストを行うための入門ガイドです。
Jestを使ってどうやってテストするのかといった疑問に答えます。
テストを行っていくための最初の一歩になればと思います。
それでは、さっそく学んでいきましょう!

View file

@ -1,49 +0,0 @@
# ECMAScriptモジュールのテスト ―― Babelの設定
ECMAScriptモジュール (ESM) とは、JavaScriptをモジュールとして再利用できるようにするための仕組みです。
Node.js標準でESMを取り扱えるようにするためには `package.json` ファイルに `"type": "module"` プロパティを加えます。
```json
{
"type": "module"
}
```
このように書き加えると、プロジェクトの `.js` ファイルはESMとして取り扱われます。
一方、Jestに関しては、2022年2月現在、まだNode.js標準のESMをサポートしていません。
そのため、JestでESMをテストするには、さらにJavaScriptのコードを変換するための設定を行う必要があります。
ESMのJavaScriptのコードを変換するには、たとえば、下記の方法があります。
- `babel-jest` … Babelを使用して変換 (Jestのデフォルト)
- `ts-jest` … tscを使用して変換
- `esbuild-jest` … esbuildを使用して変換
- `@swc/jest` … swcを使用して変換
ここでは、Babelを使用して変換する方法を説明します。
まず、`@babel/preset-env``npm` コマンドによってインストールし、Babelの設定を行います。
```bash
npm i -D @babel/preset-env
```
Babelには、プリセットと呼ばれる前もって調整済みの設定を行うためのパッケージがあります。
`@babel/preset-env` は、Babelが公式で提供する一般的なJavaScriptの変換を行うためのプリセットです。
`babel.config.json` を作成し、下記の設定を書き加えます。
```json
{
"presets": ["@babel/preset-env"],
"targets": "current node"
}
```
これは「現在実行しているNode.jsの向けの変換を行う」という意味です。
Babelを使用するプロジェクトは、`babel.config.json` というファイルなどによって設定を行います。
これで、JestでESMをテストすることができるようになりました。
それではさっそく、ESMのテストを作成してみましょう。

View file

@ -1,107 +0,0 @@
# はじめてのテスト
ターミナルから `npm` コマンドでJestをインストールします。
```bash
npm i -D jest
```
または
```bash
npm install --save-dev jest
```
いずれかのコマンドを実行することでJestがインストールされます。
ここでインストールしたJestは、このプロジェクトの開発用の依存関係として追加されます。
つまり、これ以降このプロジェクトは `npm install` コマンドを実行することでJestを導入できるようになります。
インストールしたJestは、`npx jest` コマンドを使用することで実行できます。
```bash
npx jest
```
しかし、まだテストが1件も存在しないのでこのコマンドは失敗します。
```console
$ npx jest
No tests found, exiting with code 1
Run with `--passWithNoTests` to exit with code 0
In /home/kou029w/intro-to-software-testing
11 files checked.
testMatch: **/__tests__/**/*.[jt]s?(x), **/?(*.)+(spec|test).[tj]s?(x) - 0 matches
testPathIgnorePatterns: /node_modules/ - 11 matches
testRegex: - 0 matches
Pattern: - 0 matches
```
実際にテストを作成し、実行していきましょう。
次のファイルを作成します。
```js
// hello.test.js
test("1と2の合計は3です", () => {
expect(1 + 2).toBe(3);
});
```
この作成した `hello.test.js` は、`npx jest` コマンドを実行するときにテストとして実行されるようになります。
```console
$ npx jest
PASS ./hello.test.js
✓ 1と2の合計は3です (1 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.204 s
Ran all test suites.
```
問題なく実行できましたか?
気付いた人もいるかと思いますが、
```
PASS ./hello.test.js
```
とあるのは、「テスト `hello.test.js` が実行され、そのテストは合格 (pass) しました」ということを意味します。
このようにしてJestは簡単にテストを行うことができます。
## はじめてのテストのコードの説明
テストのコードについてより詳しく説明します。
はじめてのテストのコード:
```js
test("1と2の合計は3です", () => {
expect(1 + 2).toBe(3);
});
```
このコードは、「1と2の合計は3です」というテストを意味します。
`1 + 2` が、 `3` と等しいことを検証するテストです。
下記のJestの機能が使われています。
`test()` 関数
テストを宣言するための関数です。
- 第一引数には、このテストの説明を人間が読める形式で記述します
- 第二引数には、テストの本体を記述します
`expect()` 関数
引数に与えた値をテストします。
`.toBe()` メソッド
与えた値との同一性を検証します。
このコードは、Jestの基本的な機能を確認するための極めて単純なテストですが、テスト環境自体の検証を行うことでもあります。
テスト環境の検証は、テストを行う上で最初に確認しておく重要なポイントです。

View file

@ -1,3 +0,0 @@
# 質問・提案・問題の報告
もし何か気になることがあれば、[GitHub Issues](https://github.com/kou029w/intro-to-software-testing/issues/new) からお気軽にお寄せください。

View file

@ -1,56 +0,0 @@
# Jestの機能
Jestの代表的な機能を紹介します。
## Matcher
マッチャー (matcher) とは、与えた値を検証するためのメソッドです。
### 同一性の検証
- `toBe` … 与えた値との同一性 (`===`) を検証します
- `toEqual` … オブジェクトまたは配列のすべてのプロパティの同一性を再帰的に検証します
### 真偽値とそれに類する値の検証
- `toBeNull` … null
- `toBeUndefined` … undefined
- `toBeDefined` … undefined でない (つまり `not.toBeUndefined` と等価)
- `toBeTruthy` … if ステートメントが真であるとみなすもの
- `toBeFalsy` … if ステートメントが偽であるとみなすもの
### 数値
- `toBeGreaterThan` … >
- `toBeGreaterThanOrEqual` … >=
- `toBeLessThan`<
- `toBeLessThanOrEqual`<=
- `toBeCloseTo` … 浮動小数点数の丸め誤差を考慮した同一性
### 文字列
- `toMatch` … 正規表現のパターン
### 配列と反復可能なオブジェクト
- `toContain` … 配列や反復可能なオブジェクトに特定のアイテムが含まれているかを検証します
### 例外
- `toThrow` … 例外を発報するかどうかを検証します
### その他
より詳しい情報は [Jest公式リファレンス](https://jestjs.io/ja/docs/expect) を参照してください。
## Promise
Jestは、`test` に渡す関数の前に `async` キーワードを記述するだけで、非同期テストを実行できます。
より詳しい情報は [Jest公式ドキュメント Async/Await](https://jestjs.io/ja/docs/asynchronous#asyncawait) を参照してください。
## beforeEach と afterEach
`beforeEach``afterEach` を使用することでテストの実行の前に繰り返し行う準備や、後片付けの処理を宣言できます。
より詳しい情報は [Jest公式ドキュメント セットアップと破棄](https://jestjs.io/ja/docs/setup-teardown) を参照してください。

View file

@ -1,194 +0,0 @@
# テストの実践 ――「うるう年」問題
ここでは「うるう年」を判定するESMを作成します。
「うるう年」の判定は、通常広く使われている `date-fns` などのNPMパッケージを使用することが多いですが、ここではテストを学ぶためにあえて自分で実装します。
設計して、テストを書き、コードを書くという一連のステップでより実践的なテストとの付き合い方を学びましょう。
## 目標の決定
まず「何を作るか」明らかにしましょう。
何を作るか曖昧なまま、ただ無為にソフトウェア開発を進めるとムダを生む恐れがあります。
ムダを生まないためにできるだけ「何を作るか」を明確にしておきましょう。
「うるう年」を判定するということは、「西暦年号がうるう年ならば true を返し、そうでなければ false を返す関数」ということと決めます。
「うるう年」とは何であるかは、ここでは日本の法令を参考にして決めます。
日本の法令上の取り扱いは、明治時代に制定された「閏年ニ関スル件」によって決められています。
> 神武天皇即位紀元年数ノ四ヲ以テ整除シ得ヘキ年ヲ閏年トス但シ紀元年数ヨリ六百六十ヲ減シテ百ヲ以テ整除シ得ヘキモノノ中更ニ四ヲ以テ商ヲ整除シ得サル年ハ平年トス
>
> ―― [https://elaws.e-gov.go.jp/document?lawid=131IO0000000090](https://elaws.e-gov.go.jp/document?lawid=131IO0000000090)
「神武天皇即位紀元年数」は、通常の西暦年号でいう紀元前660年を意味します。したがって「紀元年数ヨリ六百六十ヲ減シテ」とあるのは通常の西暦年号を意味します。
端的に言うと「グレゴリオ暦法に基づいています」ということを意味します。
このままだと大変読みにくいですね。
書き換えると下記のようになります。
> 西暦年号が4で割り切れる年はうるう年。ただし、西暦年号が100で割り切れる年のうち、100で割った商が4で割り切れない年はうるう年ではない。
これを「うるう年」とします。まとめるとこうなります。
- 西暦年号が4で割り切れる年はうるう年
- たとえば、西暦2024年、2028年、2032年は4で割り切れるので、うるう年です。
- 西暦年号が4で割り切れない年はうるう年でない
- たとえば、西暦2021年、2022年、2023年は4で割り切れないので、うるう年ではありません。
- ただし、西暦年号が100で割り切れる年はうるう年でない
- たとえば、西暦2100年、2200年、2300年は100で割り切れるので、うるう年ではありません。
- ただし、西暦年号が400で割り切れる年はうるう年
- たとえば、西暦2000年、2400年、2800年は400で割り切れるので、うるう年です。
これで「何を作るか」ということが明らかになりました。
それでは、順番にテストとコードを書いていきましょう。
## 「西暦年号が4で割り切れる年はうるう年」
ファイル `isLeapYear.test.js` を作成します。
「何を作るか」ということを忘れないようにコメントに転載します。
```js
// isLeapYear.test.js
/** TODO:
西暦年号が4で割り切れる年はうるう年
たとえば、西暦2024年、2028年、2032年は4で割り切れるので、うるう年です。
西暦年号が4で割り切れない年はうるう年でない
たとえば、西暦2021年、2022年、2023年は4で割り切れないので、うるう年ではありません。
ただし、西暦年号が100で割り切れる年はうるう年でない
たとえば、西暦2100年、2200年、2300年は100で割り切れるので、うるう年ではありません。
ただし、西暦年号が400で割り切れる年はうるう年
たとえば、西暦2000年、2400年、2800年は400で割り切れるので、うるう年です。
*/
```
うるう年であることを判定するので `isLeapYear` という名前に決めました。
この名前のモジュールと関数を作成することに決めます。
テストを書いていきましょう。
```js
// isLeapYear.test.js
test("西暦年号が4で割り切れる年はうるう年", () => {
expect(isLeapYear(2024)).toBe(true);
});
```
これをテストし、失敗することを確認します。
この失敗は、テスト環境自体の検証を行うことでもあります。
コマンド:
```bash
npm test
```
テスト結果:
```console
FAIL ./isLeapYear.test.js
✕ 西暦年号が4で割り切れる年はうるう年 (1 ms)
```
失敗しますね。
この失敗によって、次の2点を実証できました。
- 目標の「西暦年号が4で割り切れる年はうるう年」というテストが実行されること
- 未実装のテストが意図せず合格しない (fail) ということ
テスト環境の検証は、テストを行う上での重要なポイントです。
それでは、関数を実装していきましょう。
最初からすべての実装を書こうとせず、小さい変更のみで済ませるのがポイントです。
```js
// isLeapYear.js
function isLeapYear(year) {
return year % 4 === 0;
}
export default isLeapYear;
```
ファイルを作成したら、テスト側でも `import` 文によって実装した関数を読み込みます。
```js
// isLeapYear.test.js
import isLeapYear from "./isLeapYear";
test("西暦年号が4で割り切れる年はうるう年", () => {
expect(isLeapYear(2024)).toBe(true);
});
```
テストを実行します。
テスト結果:
```console
PASS ./isLeapYear.test.js
✓ 西暦年号が4で割り切れる年はうるう年 (1 ms)
```
これでテストは合格しました。
念の為、西暦2024年のケースだけでなくほかのケースもテストしてみましょう。
「西暦年号が4で割り切れる年はうるう年」という目標を達成したと判断したら、コメントからは消しておきます。
```js
// isLeapYear.test.js
import isLeapYear from "./isLeapYear";
test("西暦年号が4で割り切れる年はうるう年", () => {
expect(isLeapYear(2024)).toBe(true);
expect(isLeapYear(2028)).toBe(true);
expect(isLeapYear(2032)).toBe(true);
});
/** TODO:
西暦年号が4で割り切れない年はうるう年でない
たとえば、西暦2021年、2022年、2023年は4で割り切れないので、うるう年ではありません。
ただし、西暦年号が100で割り切れる年はうるう年でない
たとえば、西暦2100年、2200年、2300年は100で割り切れるので、うるう年ではありません。
ただし、西暦年号が400で割り切れる年はうるう年
たとえば、西暦2000年、2400年、2800年は400で割り切れるので、うるう年です。
*/
```
次の目標「西暦年号が4で割り切れない年はうるう年でない」に進めていきます。
テストを書き、実行します。
必要に応じて実装を修正します。
これらのテストも問題なく合格するようになれば、「西暦年号が4で割り切れない年はうるう年でない」という目標も達成したと判断して、コメントから消しておきます。
```js
// isLeapYear.test.js
import isLeapYear from "./isLeapYear";
test("西暦年号が4で割り切れる年はうるう年", () => {
expect(isLeapYear(2024)).toBe(true);
expect(isLeapYear(2028)).toBe(true);
expect(isLeapYear(2032)).toBe(true);
});
test("西暦年号が4で割り切れない年はうるう年でない", () => {
expect(isLeapYear(2021)).toBe(false);
expect(isLeapYear(2022)).toBe(false);
expect(isLeapYear(2023)).toBe(false);
});
/** TODO:
ただし、西暦年号が100で割り切れる年はうるう年でない
たとえば、西暦2100年、2200年、2300年は100で割り切れるので、うるう年ではありません。
ただし、西暦年号が400で割り切れる年はうるう年
たとえば、西暦2000年、2400年、2800年は400で割り切れるので、うるう年です。
*/
```
## 続きの課題
残りの目標に関しても同様に進めていきましょう。
- ただし、西暦年号が100で割り切れる年はうるう年でない
- たとえば、西暦2100年、2200年、2300年は100で割り切れるので、うるう年ではありません。
- ただし、西暦年号が400で割り切れる年はうるう年
- たとえば、西暦2000年、2400年、2800年は400で割り切れるので、うるう年です。

View file

@ -1,115 +0,0 @@
# 事前準備
JestはNode.js上で実行します。
まずはじめにNode.jsをインストールしましょう。
## Node.jsのインストール
いくつか方法がありますが、[Node.jsの公式サイト](https://nodejs.org)を参照するのがよいでしょう。
プロキシが存在する環境では、追加で下記の設定を行う必要があります。
### NPMのプロキシの設定
確認:
プロキシが存在する環境では、ターミナルで `npm` コマンドを実行した際、次のようなエラーメッセージとともに失敗することがあります。
```console
$ npm install --save-dev jest
npm ERR! code ENOTFOUND
npm ERR! syscall getaddrinfo
npm ERR! errno ENOTFOUND
npm ERR! network request to https://registry.npmjs.org/jest failed, reason: getaddrinfo ENOTFOUND proxy.example.com
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'
npm ERR! A complete log of this run can be found in:
npm ERR! /home/webdino/.npm/_logs/2022-01-12T07_20_33_146Z-debug-0.log
```
このようなエラーが出る場合は、環境変数 `HTTP_PROXY``HTTPS_PROXY` に適切なプロキシのURLを設定します。
一方、このようなエラーが出ない場合は、下記の設定は不要です。必要に応じて行いましょう。
設定項目:
| 環境変数 | 値 | 例 |
| ----------- | ------------------------ | --------------------------------------- |
| HTTP_PROXY | httpプロキシのURLを入力 | http://user:pass@proxy.example.com:8080 |
| HTTPS_PROXY | httpsプロキシのURLを入力 | http://user:pass@proxy.example.com:8080 |
これらはあくまで例です。実際には自分の環境の設定に合わせて変更する必要があります。
Bash の例:
```bash
echo 'export HTTP_PROXY=http://user:pass@proxy.example.com:8080' >> ~/.bashrc
echo 'export HTTPS_PROXY=http://user:pass@proxy.example.com:8080' >> ~/.bashrc
. ~/.bashrc
```
Windows の例:
「[windows ユーザー環境変数 設定](https://www.google.com/search?q=windows+%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0+%E8%A8%AD%E5%AE%9A&oq=windows+%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0+%E8%A8%AD%E5%AE%9A)」でGoogle検索。
別の方法: 環境変数ではなく `npm config` を使う例:
```bash
npm config -g set proxy http://user:pass@proxy.example.com:8080
npm config -g set https-proxy http://user:pass@proxy.example.com:8080
```
## ターミナルの使用
コマンドを実行するにはターミナルを使用します。
macOS の場合:
[アプリケーション] > [ユーティリティ] 内にある [ターミナル] を選択して起動します。
Windows の場合:
Microsoft Storeから、Windows Terminalをインストールします。
インストール後、[スタートメニュー] > [Windows Terminal] を選択して起動します。
## Node.jsの使用
確認:
```bash
node -v
```
ターミナルで実行します。
インストールしたNode.jsのバージョンが表示されていれば、Node.jsを使用する準備は完了です。
```console
$ node -v
v16.14.0
```
## プロジェクトの作成
Node.jsを使ったプロジェクトは、基本的に `package.json` というファイルが配置されます。
`package.json` には、次のようなプロジェクトに必要な付帯情報が含まれます。
- 名前とバージョン
- 外部モジュールや依存関係
- テストやビルドするためのコマンドなど
Node.jsを使った開発をはじめるにあたって、最初にプロジェクトのためのディレクトリを作成します。
```bash
mkdir my-project
cd my-project
```
そして、その中に `package.json` を配置します。
```bash
npm init -y
```
ひととおり準備ができました。

View file

@ -1,24 +0,0 @@
# テストの作法
テストを書くときの代表的な作法を紹介します。
## Arrange・Act・Assert (AAA) パターン
テストを書くときの作法の1つです。
準備 (Arrange)・実行 (Act)・検証 (Assert) というプロセスで分けて書きます。
準備・実行・検証をそれぞれ分けて書いておくことで比較的読みやすいテストを書くことができます。
例:
```js
test("正しくJSONをパースできる", () => {
// 準備
const json = `{"name": "太郎", "age": 20}`;
// 実行
const parsed = JSON.parse(json);
// 検証
expect(parsed).toEqual({ name: "太郎", age: 20 });
});
```