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']);
    
        $this->artisan('db:production-sync')
            ->expectsOutput(‘DB sync will only run on local and staging environments’)
            ->assertExitCode(true);
    });

     

    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.