# How to mock a static facade method in Laravel?

Mocking a static facade method in Laravel for testing can be achieved using a combination of Laravel's built-in features and PHPUnit.

### **1\. Understand the Static Facade**

In Laravel, static facades provide a convenient way to access Laravel services. For example, `Config::get('key')` is a facade call to retrieve a configuration value.

### **2\. Install PHPUnit**

Ensure that PHPUnit is set up and integrated with your Laravel project. Laravel ships with PHPUnit pre-configured, so you can start writing your tests immediately.

### **3\. Using Facades**

Facades are typically used statically like this:

```php
use Illuminate\Support\Facades\Config;

$value = Config::get('key');
```

### **4\. Mocking the Facade**

To mock a static facade method, you'll use the `Facade` class and its `shouldReceive` method from PHPUnit.

For instance, let's say we want to mock the `Config::get()` method:

```php
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Facade;

class ExampleTest extends TestCase
{
    public function testConfigGet()
    {
        // Mock the facade
        Facade::shouldReceive('get')
            ->with('key')
            ->andReturn('mocked value');

        // Your test logic
        $value = Config::get('key');

        // Assert the mocked value is returned
        $this->assertEquals('mocked value', $value);
    }
}
```

### **5\. Explanation**

* **Facade::shouldReceive('get')**: This sets up an expectation that the `get` method of the `Config` facade will be called.
    
* **\-&gt;with('key')**: Specifies that the `get` method should be called with the argument `'key'`.
    
* **\-&gt;andReturn('mocked value')**: Specifies the return value when the `get` method is called with `'key'`.
    

### **6\. Running the Test**

Run your PHPUnit tests.

### **Additional Tips:**

* **Use Namespaces**: Ensure you're importing the correct facade and Facade class.
    
* **Isolate Tests**: Each test should be independent and ideally only test one piece of functionality.
    
* **Reset Mocks**: If you need to reset mocks between tests, use `Facade::clearResolvedInstances();` to clear resolved instances.
    

By following these steps, you can effectively mock static facade methods in Laravel for testing purposes. This approach allows you to control the behavior of Laravel facades within your test environment.
