Injecting dependencies for validation testing
If I inject a GeneralSettings class into the rules method of a validation class:
public function rules(GeneralSettings $settings): array
{
$countries = $settings->countries;
My test looks like:
protected function validate(array $data)
{
$request = new UsersStoreRequest();
return Validator::make($data, $request->rules());
}
But $request->rules() squawks because the $settings variable isn't there. Do I need to manually inject the class or is there a nicer way?
protected function validate(array $data)
{
$settings = app(GeneralSettings::class);
$request = new UsersStoreRequest();
return Validator::make($data, $request->rules($settings));
}
This works but I assumed Laravel built up the classes with any dependencies automatically?
@jackjones The automatic dependency injection only works when Laravel is directly calling the method. For example in a controller or service class.
When you manually invoke methods like rules() in your tests, Laravel's DI container doesn't automatically resolve the dependencies.
So, the short answer is, that you need to manually resolve the dependency as you mentioned in your code example.
Please or to participate in this conversation.