Mixing the Laravel 5.4+ HTTP testing layer with BrowserKit testing

Pascal Baljet, 31 Jan 2018


Laravel 5.4 (January, 2017) came with the introduction of Laravel Dusk, a first-party package with support for browser automation and a corresponding testing API. The HTTP testing layer got rewritten and became much more focussed on APIs from Laravel 5.4 onwards. Some of the HTTP testing tools were removed and bundled in the optional browser-kit-testing package.

You can use the rewritten HTTP testing layer in Laravel 5.4+ and the 'old' Laravel 5.3 testing layer side-by-side. What you can't do is mix those two in one test. I wrote a little package which solves that constraint. It contains just one macro which adds a browserKit method to the TestResponse class. This way you can make and test requests with the new layer and do assertions with the old layer.

Now why would you do that? Laravel 5.4+ provides a lot of assertions for responses but the old layer has some gems too, for example: seeElement. Take a look at the Laravel 5.3 TestCase to find some other cool ones. In the example below I'm mixing the two testing layers, you can find the package at GitHub.

/** @test */
public function it_presents_a_registration_form()
{
    $this->get('register')
        ->assertStatus(200)
        ->browserKit(function ($test) {
            $test->seeElement('input', ['name' => 'email']);
        });
}