---
# System prepended metadata

title: 2020年10月31日モブプロ#10

---

# 2020年10月31日モブプロ#10

[MDの書き方](https://qiita.com/tbpgr/items/989c6badefff69377da7)

モブプロのコンテンツは🤟がついています。

# 前回の続き

```javascript=
await waitForElement(() => ...)
```

これでうまくテストできるようになる。
非同期処理がある場合は必要。

## チェックできるかどうかのテスト

```javascript=
it('チェックができること', async () => {
  const {queryByTestId} = render(<App/>)
  const doingCheckBox = await waitForElement(() => queryByTestId('doing-check'))
  expect(doingCheckBox.disabled).toBeFalsy()
})
```

## チェックされていないかどうかのテスト

```javascript=
it('チェックされてないこと', async () => {
  const {queryByTestId} = render(<App/>)
  const doingCheckBox = await waitForElement(() => queryByTestId('doing-check'))
  expect(doingCheckBox.checked).toBeFalsy()
})
```

# 完了データのテスト

```javascript=
describe('マウント with done data', () => {
  beforeAll(() => {
    axios.get = jest.fn().mockResolvedValue(mockSuccessGetDoneTask)
  })
})
```

## チェックできないかどうかのテスト

```javascript=
it('チェックができないこと', async () => {
  const {queryByTestId} = render(<App/>)
  const doingCheckBox = await waitForElement(() => queryByTestId('doing-check'))
  expect(doingCheckBox.disabled).toBeTruthy()
})

```

## チェックされていないかどうかのテスト

```javascript=
it('チェックされてないこと', async () => {
  const {queryByTestId} = render(<App/>)
  const doingCheckBox = await waitForElement(() => queryByTestId('doing-check'))
  expect(doingCheckBox.checked).toBeFalsy()
})
```

# インタラクションのテスト

```javascript=
describe('Interaction', () => {
  describe('テキストフィールド入力時', () => {
    beforeEach(() => {
      axios.get = jest.fn().mockResolvedValue(mockEmptyGetTask)
      const {queryByTestId} = render(<App/>)
      const titleTextField = queryByTestId('title-text')
      fireEvent.change(titleTextField, { target : { value : 'title' } })
    })
  })
})
```

上記を最初に書き、その中にテストケースを書いていく。

`beforeEach`を記述していることで、テストケース毎に中を実行する。

## 作成ボタンがクリックできるかテスト

```javascript=
it('作成ボタンがクリックできること', () => {
  const {getAllByTestId} = render(<App/>)
  const createButton = getAllByTestId('create-button')[0]
  expect(createButton.disabled).toBeFalsy()
})
```

## postが実行されるかテスト

```javascript=
it('作成ボタンをクリックし、POSTが実行されること', () => {
  const {getAllByTestId} = render(<App/>)
  const createButton = getAllByTestId('create-button')[0]

  const mockAddTask = jest.fn().mockResolvedValue(mockEmptyGetTask)
  axios.post = mockAddTask

  fireEvent.click(createButton)
  const path = mockAddTask.mock.calls[0][0]
  expect(path).toBe('http://localhost:8000/tasks')
})
```

### `mock.calls`

postした内容を呼び出す。

```javascript=
console.log(mockAddTask.mock.calls[0][0])

// => 'http://localhost:8000/tasks'
```

参考サイト
https://jestjs.io/docs/ja/mock-functions

## リストが表示されるかテスト

```javascript=
it('作成ボタンをクリックし、リストが表示されること', async () => {
  const {getAllByTestId, queryByTestId} = render(<App/>)
  const createButton = getAllByTestId('create-button')[0]

  fireEvent.click(createButton)

  const listItem = await waitForElement(() => queryByTestId('list-text'))
  expect(listItem).toBeInTheDocument()
})
```

## 削除ボタンのテスト

```javascript=
describe('削除ボタンをクリック', () => {
  beforeEach(() => {
    axios.get = jest.fn().mockResolvedValue(mockSuccessGetTask)
  })
  it('削除ボタンをクリックし、DELETEが実行されること', async () => {
    const {getAllByTestId} = render(<App/>)
    const deleteButton = await waitForElement(() => getAllByTestId('delete-button')[0])

    const mockDeleteTask = jest.fn().mockResolvedValue(mockSuccessDeleteTask)
    axios.delete = mockDeleteTask

    fireEvent.click(deleteButton)
    const path = mockDeleteTask.mock.calls[0][0]
    expect(path).toBe('http://localhost:8000/tasks/1')
  })
});
```

## リストが消えるかテスト

```javascript=
it('削除ボタンをクリックし、リストが消えること', async () => {
  const {getAllByTestId} = render(<App/>)
  const deleteButton = await waitForElement(() => getAllByTestId('delete-button')[0])
  fireEvent.click(deleteButton)
  await waitForDomChange()
  expect(deleteButton).not.toBeInTheDocument()
})
```

`waitForDomChange()`を使用することでDOMが変化するまで待つ