【Cypress　ver10】　baseURLの設定について

# cypress.jsonが使えない？！

最近フロントエンドの勉強でe2eテストに触れる機会があったのですが、その時に触れたのがCypress。Reactを使っているので`baseURL`を設定しようとしました。
しかし、2021年の情報を見ても「cypress.jsonなんでファイルないぞ…？」となっており混乱。
調べてみたら、案の定大型アップデートによりいろんなことが変わってました。

ここでは説明しませんが、ファイル構造も変わってるぽいです。今まで使ってた人ほど混乱しそうなので、[公式のアップデートログ](https://docs.cypress.io/guides/references/changelog#10-0-0)を翻訳してくれた下記記事をさくっと見るといいと思います。

#### Cypress v10変更点概要
https://qiita.com/odennkunn/items/bd643f5aa1cd0e6930f0

# cypress.configファイルでbaseURLを設定する
さて本題。`baseURL`は、アップデートにより現れた`cypress.configファイル`で設定する模様。
もし`cypress.configファイル`について情報がほしい場合、下記公式リファレンスを自分で読んでください。

#### cypress.configファイルについて
https://docs.cypress.io/guides/references/configuration#Configuration-File

ちなみに、ver10には`Cypress.config`というコードがある模様。上で「ファイル」までコードとしてくくっていたのはそのため。
頭文字が大文字かどうかでも区別できますが、とてもまぎわらしい。
[コードについてのリンクはこちら](https://docs.cypress.io/api/cypress-api/config)。


### ファイルの位置
v10以降のCypressは、初めて起動すると`cypress.configファイル`が生成されます。自分はJavascriptアプリなので`cypress.config.js`がルートフォルダに生成されていました。__この後に生成するcypressフォルダの中ではないので注意。__

### baseURLの書き方
`cypress.config.js`にて、
```cypress.config.js
const { defineConfig } = require("cypress");

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      // implement node event listeners here
    },
  },
});
```

何も設定していないならこのようなコードが書かれているはず。
今回、reacty-create-appを利用したReact環境では、以下のように設定します。

```diff_javascript
const { defineConfig } = require("cypress");

module.exports = defineConfig({
  e2e: {
+   baseUrl: `http://localhost:3000`,
    setupNodeEvents(on, config) {
      // implement node event listeners here
    },
  },
});
```
基本的にe2eテストの設定は、`cypress.config.js`の`e2e`の中で行うようにしてくださいと、公式リファレンスに記載されていました。
それにならい、`baseURL`を`e2e`の中に記入。
これで`baseURL`の設定は完了です。

`baseURL`以外にもどんな設定ができるか知りたいなら下記リファレンスをどうぞ。
e2eの設定項目一覧へ飛びます。

https://docs.cypress.io/guides/references/configuration#e2e

# ちゃんと動くか確認
コードは正しく動くことを確認しましょう。
というわけで、React-create-appで作成した初期React環境にて、ローカルサーバーを立ち上げて、簡単なe2eテストするところまで書きます。

### 新規e2eテスト作成
まずはテストを作成します。`cypress open`でCypressを起動して、e2eテストの画面まで移ります。

cypressファイルを作成していない場合、色々聞かれた後、以下のような画面が出ると思います。
新規作成をしたいので、右をクリックします。
左はサンプルコードを書き出してくれるものなので、初めての人は目を通しておくといいでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743701/89ce4c99-11a3-08cd-bbeb-c5e859436f33.png)


もうサンプルなどを作成している（もしくはさっきの画面でサンプルが欲しいから左をクリックした）人は、処理が終わった後に、青い「+ New spec」というボタンをクリックしましょう。上記画面と同じものが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743701/9b4d3f7d-e874-61db-7b67-997f56fba315.png)

テストの名前を決めます。`spec`と書かれている場所がこのプログラムの名前です。自由に変更してください。
できたら「Create spec」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743701/82382718-b8d8-4e05-bb5a-18ab4175966f.png)

ここまでくればファイルの作成は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743701/753d73cf-64b7-023c-7dc4-677dfe9e51fc.png)

### プログラムの書き変え
作成したファイルを書き変えて、baseURLを使ってローカルサーバーにつなげられるようにします。
とはいえ、やることは簡単。先ほど作成したファイルの中身の`cy.visit()`の中身を、以下のように書き変えるだけ。

```diff_javascript
- cy.visit('https://example.cypress.io')
+ cy.visit('/')
```
これでbaseURLに指定したURLへ飛んでくれます。

### ローカルサーバーを起動して、Cypressのテストを実行
ここまで出来たら、Reactのローカルサーバーを起動しましょう。
`yarn start`など、いつも使っている方法で大丈夫です。

ローカルサーバーを起動したら、**別のコマンドプロンプト（ターミナル）を立ち上げて、Cypressのe2eテストを起動します。**
ローカルサーバーを立ち上げたコマンドプロンプトで操作してしまうと、ローカルサーバーが終了してしまいます。新しいコマンドプロンプトを開き、Cypressを起動してください。
（自分がこれ以外の方法を知らないので、他にいい方法があるかもしれません）

あとは、作成したファイルをクリックすれば、テストが始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743701/7d2504a8-faf8-2e35-4a91-2cf99c172837.png)
上記画面のようになっていればOKです。お疲れさまでした。

# おわりに
ごく最近のアップデートでかなり変わっており、特に設定関係は沼にはまるとしんどいので、腰を据えて書きました。
初心者の助けになると幸いです。

~~これを機にCypress ver10の情報が増えると良いな~~