斷定是否會拋出例外 (Exception)

如果要測試一個流程在遭遇問題時是否會拋出例外 (Exception),斷定中也有 expectException() 的方法可以使用

it('can validate an email', function () {
    // 如果預計這個測試會拋出例外,我們可以使用這個方法來進行斷定
    // 注意這個方法必須放在測試中的最上方
    $this->expectException(InvalidArgumentException::class);

    $rule = new IsValidEmailAddress();

    $rule->passes('email', 123);
});

Pest 為這種情況提供一個更直覺的方法 throws()

it('can validate an email', function () {
    $rule = new IsValidEmailAddress();

    $rule->passes('email', 123);
})
->throws(InvalidArgumentException::class);

除了斷定丟出哪一種例外,也可以對例外的錯誤訊息進行斷定,就算例外的類型對上了,只要訊息不對,斷定還是會失敗

it('can validate an email', function () {
    $rule = new IsValidEmailAddress();

    $rule->passes('email', 123);
})
->throws(InvalidArgumentException::class, 'The value must be a string');

This site uses Just the Docs, a documentation theme for Jekyll.