stop behat on 500 errors with mink

I had some issues diagnosing 500 errors that were happening with Mink. The main issue being that a page would 500, but then the test would proceed and fail a later step. Unfortunately the HTML/screenshot that was captured does not capture the error, but instead captures the assertion which doesn’t help debug.

It’s possible to react after a step and check if the last Mink request was a 500 or not. This way, we fail on the 500, and not on the subsequent assertions.

<?php
  /**
   * @AfterStep
   */
  public function afterStep(Behat\Behat\Hook\Scope\AfterStepScope $scope) {
    // Fail if we got a 500.
    try {
      $this->minkContext->assertSession();
      $this->minkContext->assertNotHttpResponse(500);
    }
    catch (Behat\Mink\Exception\DriverException $e) {
      // Page is not loaded.
    }

  }