🍣

JestでAvoid calling `expect` conditionallyの対応

2021/07/03に公開

現象

TypescriptでJestのテストコードを作成中に、Eslintが"Avoid calling expect conditinally" (jest/no-conditionaly-expect) というエラーを吐いた。

test('存在するナンバーの車を取得する', async () => {
  const connection = getConnection();
  const carRepository = new DataSourceCarRepository(connection);
  const carNumber = new CarNumber('富士山 わ XX-XX');
  const car = carRepository.findByNumber(carNumber);
  if (car !== nulL) {
    expect(car.id.value).toBe(1); # ここでAvoid calling `expect` conditionallyがでた
  } else {
  }
}

型ガードを使用してcarのIDの値の比較をしようとしたところ、Avoid calling expect conditionallyが出てしまう。型ガードを外すとcarはnullの可能性があるためエラーが出る。

原因

条件によってテストが通ったり通らなかったりする脆弱なテストを防ぐためのエラーです。

class CarId {
  constructor(private _value: number) {}
  get value(): number {
    return this._value;
  }
}

class Car {
  constructor(private _id: CarId, private _number: CarNumber) {}
  get id(): CarId {
    return this._id;
  }
}

class DataSourceCarRepository implements CarRepository {
  findByNumber(carNumber: CarNumber): Car | null {
    ...
  }
}

対応

Non-null assertion operatorを利用してエラーが出ないようにした。

  const car = carRepository.findByNumber(carNumber);
  expect(car?.id.value).toBe(1);

Discussion