Довольно плохо знаком с PHP, так что простите, если я пропустил что-то очевидное.
В настоящее время я использую Lumen (который в основном является базовым c Laravel, только с основными зависимостями) и Eloquent для управления постоянными сущностями.
Я хочу написать модульный тест, в котором мне нужно вызвать функцию, которая в какой-то момент выполняет Eloquent запрос, подобный следующему:
$errorMailRecipients = User::where('id_role', 1)
->where('some_value', 1)
->whereNotNull('email_addr');
Мой пользователь. class, это базовая c Eloquent сущность:
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject
{
use Authenticatable, Authorizable, Eloquence, Mappable;
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'modification_date';
/** Eloquent model configuration */
protected $connection = 'database_name';
protected $table = 'user';
protected $primaryKey = 'id';
// other stuff mapping, functions, etc ...
}
Итак, я создал тест и пытался, с помощью насмешки, смоделировать этот конкретный c запрос:
class ImportTest extends TestCase
{
public function test_should_send_error_mail_when_receiving_empty_request()
{
// Given
$controller = new ImportController();
$mockedRecipients = // <- some Collection containing static data
$mock = Mockery::mock(User::class, function ($mock) use ($mockedRecipients) {
$mock->shouldReceive('where')->once()->andReturn($mockedRecipients);
});
$this->app->instance('App\Models\User', $mock);
// When
$controller->importDevices(new Request());
// Then
}
}
Я перепробовал много вариантов и разложить насмешки на несколько строк:
$mock = Mockery::mock(User::class);
$this->app->instance('User', $mock);
$mock->shouldReceive('where')->once()->andReturn($mockedRecipients);
Также попытался удалить -> Once () и прочитал следующие руководства:
Но до сих пор у меня возникала следующая ошибка при выполнении PHP Модульный тест:
Подсветка \ База данных \ QueryException: SQLSTATE [HY000] [2002] Соединение отклонено ...
Потому что вы ах, у меня нет локальной базы данных, и она все еще пытается поразить ее. Какие-нибудь мысли ? Спасибо