rolies106/eloquent-sluggable
Eloquent Sluggable generates clean, unique URL slugs from your model attributes automatically. Customize slug sources, separators, and uniqueness rules, and keep slugs in sync on create or update with minimal configuration.
The 3.1.1 release is a patch that addresses exceptions surfacing during test execution. It is not a feature release, and the notes do not disclose which code paths were affected, so treat your first task as verification rather than adoption.
composer require vendor/package:^3.1.1 or composer update vendor/package --with-dependencies) and run the full suite, including the tests that were previously noisy. The value of this release is only realised if you confirm the specific failures you were seeing have actually gone away.tests/TestCase.php, any custom setUp()/tearDown(), and the package's own config defaults.markTestSkipped(), @group exclusions, or try/catch workarounds you added to get CI green. Remove one workaround at a time and confirm.Isolate the package's test surface. If the fixes concern test-time exceptions, the practical pattern is to make the boundary between your test harness and the package explicit:
protected function setUp(): void
{
parent::setUp();
// Resolve the package early so boot-time errors surface with a clear stack trace
$this->app->make(\Vendor\Package\Contracts\Client::class);
}
Doing this in a base test case means a regression in the package's container bindings fails on a single line rather than deep inside an unrelated test.
Prefer fakes and container swaps over environment flags. If the prior errors were caused by the package attempting real work during tests, bind a fake rather than toggling behaviour via config:
$this->app->instance(\Vendor\Package\Contracts\Client::class, new FakeClient());
This survives future patch releases; config flags that disable behaviour are the kind of thing that quietly gets renamed.
Pin and promote deliberately. Run 3.1.1 in the CI matrix alongside 3.1.0 for one cycle if you have the capacity. With a one-line changelog, parallel runs are the cheapest way to confirm the fix is real and that nothing else shifted.
Feature tests over unit tests for this class of bug. Exceptions thrown during testing are frequently bootstrapping or lifecycle issues, which only appear when the full framework is present. A RefreshDatabase feature test exercising the package's main entry point is worth more here than a mocked unit test.
Wire it into CI as a guard. If the fix addressed errors that only appeared under test, add a smoke test that hits the package's primary integration path so a future regression fails loudly rather than intermittently.
config:cache will mask config changes. If you're debugging at all, run php artisan config:clear && php artisan cache:clear before concluding anything about the package's behaviour. Cached config is the most common cause of "it works locally but not in CI."withoutExceptionHandling() is your debugging lever. If 3.1.1 changes what gets rethrown versus reported, $this->withoutExceptionHandling() in a failing test will show you the original exception and stack trace, which the normal test harness may obscure.vendor/package to 3.1.0 in composer.json, or something in your composer.lock is holding it back transitively, you may "upgrade" without actually upgrading. Verify with composer show vendor/package.config/app.php, you may be booting it twice — a plausible source of test-only exceptions. Check bootstrap/providers.php (Laravel 11+) or config/app.php for duplicates.tearDown(), consider $this->app->forgetInstance(...) for anything the package registers as a singleton.shouldReceive(), or a config-driven driver. Most packages give you a swap point; patching around the package is the option of last resort.trigger_error(..., E_USER_DEPRECATED) calls or @deprecated annotations if you plan to stay on the 3.x line long-term.How can I help you explore Laravel packages today?