環境
Laravel v9.5.1 (PHP v8.1.3)
前提条件
UserRole
が1~3
までEnumで定義されてるところに、存在しない4
を入れてエラーが起きることをテストしたい。
テスト方法
例外のテストは、テストしたいメソッドより先に書く。
理由はテストしたいメソッドを先に書くと、そこで例外が発生しエラーで落ちるから。
少し考えれば当たり前なんだけど、普段テストを書きまくっているとつい最後に書くものと思い込んでしまっていた。
expectException
「エラーを期待する」という命名からも先に書くことは予想できる。
public function testError()
{
$this->expectException(ValueError::class);
UserRole::from(4);
}
RailsのRSpecでは
expect
のブロックの中にテストしたいメソッドを書くことで例外の発生をテストできる。
subject { instance.method }
expect { subject }.to raise_error(MyError)
参考