---
# System prepended metadata

title: 2020-02-10 pair-2b 定例
tags: [Pair-B]

---

# 2020-02-10 pair-2b 定例

## 疑問
### 粟田
#### `.toBe`と`.toBeCloseTo`の使い分け
少数は`.toBeCloseTo`らしいが、負の数も？
ちょっと忘れたけど、2進数で考えると少数と負の数って同じような原理というか作りだったような、、
ということは両方`.toBeCloseTo`で正しいのかな〜と思っている
- 【村上】どこかでご指摘いただいたままスルーしていたような気がしてきました…自分が負の数をテストする時にtoBeCloseToにしてたのは、ふつうにミスだったと思います…
- 【村上】（なんとなくしか覚えていませんが）2進数で、負の数は補数を使えば表現できて、小数は指数部とか仮数部とかみたいなかんじでセクション分けしてゴチャゴチャやってたような記憶が…

#### `null`と`undefined`
なんか書いてある内容に一貫性がないように感じた。
`undefined`を使うのはあまりよくないよ！って言いながら、ガイドには`私たちはnullは使わん！undefinedだけ使う！`って書いてある、、、
[undefined の明示的な利用を制限する](https://typescript-jp.gitbook.io/deep-dive/recap/null-undefined#undefined-nonawosuru)
[値の有効性を表す意味でundefinedを使用しない](https://typescript-jp.gitbook.io/deep-dive/recap/null-undefined#nowosudeundefinedwoshinai)
[結論](
https://typescript-jp.gitbook.io/deep-dive/recap/null-undefined#jie-lun)
[コーディングガイドライン](
https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines#null-and-undefined)

- 【村上】なにも値がないことを表現するくらいなら、nullは使わずにそもそもフィールドを用意せず、エラーハンドリングで何も値がないものを扱うときはundefinedかどうかを確かめる、みたいな解釈をしました
```typescript=
const hoge = {fuga: 1, hogege: 2}
console.log(hoge.fugaga) //undefined
console.log(hoge.fugaga.hogetarou) // type error
console.log(hoge?.fugaga?.hogetarou) // undefined
```

```csharp=
class hoge {
private string fuga;
private bool empty;

public hoge(bool empty = false){
this.empty = empty;
}

public bool IsEmpty(){
return empty;
}
}

private GetHoge(string aaa){
if (aaa == "aaa"){
return new hoge(true);
}
return new hoge();
}

var h = GetHoge();

if (h.IsEmpty()){

}
```

#### テストコードの命名規則
jestではないが、自分は以下のようなテスト名をつけることがベストだと思っている。
この辺りいろいろ話してみたい。
[参考記事](
https://qiita.com/jnchito/items/42193d066bd61c740612#context-%E3%81%A7%E6%9D%A1%E4%BB%B6%E5%88%A5%E3%81%AB%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%E3%81%99%E3%82%8B)

```typescript=
describe("asyncSumOfArraySometimesZero", (): void => {
test("3を返すこと", async (): Promise<void> => {
DatabaseMock.prototype.save = jest.fn((): void => {});
const data = await asyncSumOfArraySometimesZero([1, 2], new DatabaseMock());
expect(data).toBe(3);
});
// このテストはsumOfArrayのテストだからテストケースとして不要か？
test("空の配列を渡してデータベースへの保存が成功したら、0を返すこと", async (): Promise<void> => {
DatabaseMock.prototype.save = jest.fn((): void => {});
const data = await asyncSumOfArraySometimesZero([], new DatabaseMock());
expect(data).toBe(0);
});
test("1と2の配列を渡してデータベースへの保存が失敗したら、0を返すこと", async (): Promise<void> => {
DatabaseMock.prototype.save = jest.fn((): void => {
throw new Error("fail");
});
const data = await asyncSumOfArraySometimesZero([1, 2], new DatabaseMock());
expect(data).toBe(0);
});
});
```

（例）
- どういった基準で名前をつけているか
- テストケースは日本語か？英語か？
- 複数のexpectを一つのtestに入れるか

#### テストケースの考え方
自分の追加した関数（`greet`）に書いたテストケースについて聞いてみたい。クイズにもあるけど。

### 玄徳

#### storybookを作ろう

- 「本番サービスをCRAで開発することはほとんどない」→なぜか？
- 無駄が多いから？
- CRA→ejectしてbabelやwebpackの設定を触ることが多いから？
- Next.jsなど使うから？

### 永井

- jestでtypescriptの型エラーをテストしたい場合はどうすればいいのか？

- testとdiscribeの違い、使い分け]
- discribeはグループ、フォルダ分けのイメージ

###### Tags: `Pair-B`