Black Friday sale is now on! 50% off Laravel: The Modular Way. Learn more

Laravel how to set app environment during tests

David Carr

Laravel Framework Tests

    If you need to set an environment to be a specific one such as staging you can override the environment by changing the config value app_env

    config(['app.env' => 'staging']);

    Then doing a dd on config(‘app.env’) will return that environment you’ve just set.

    I haven’t found a way to set environments with app()->environment() so instead, I recommend using this in_array function and passing in the config(‘app.env’) and then specifically defining the environments. 

    in_array(config('app.env'), ['local', 'staging'])

    For example, say you have this in a command:

    if (! in_array(config('app.env'), ['local', 'staging'])) {
        $this->error(‘Will only run on local and staging environments’);
        return true;

    Test this runs when the environment is set to production

    test(‘cannot run on production’, function () {
        config(['app.env' => 'production']);
            ->expectsOutput(‘DB sync will only run on local and staging environments’)


    Laravel Modules Book by David Carr

    Help support the blog so that I can continue creating new content!

    Subscribe to my newsletter

    Subscribe and get my books and product announcements.

    © 2009 - 2022 DC Blog. All code MIT license. All rights reserved.