Я пытаюсь проверить черту, которая используется в нескольких моделях Eloquent в моем приложении.Подход к тестированию, который я использую, заключается в создании анонимного класса в моем тестовом классе и проверке того, что метод trait, вызванный в анонимном классе, возвращает правильные результаты.Я сталкиваюсь с проблемами из-за отношений, вызываемых в методе trait, с которым, похоже, борется подход анонимного класса.
Я создал анонимный класс в своем тестовом классе, который расширяет модель Eloquent и используетмою черту я пытаюсь проверить.Я также указал отношения в классе anon, который затем используется в методе trait, который я пытаюсь проверить.Тем не менее, поскольку связь между многими и многими, когда я пытаюсь вызвать связь в тесте, Eloquent ищет в таблице соединений ai2nx3xla_emails (ai2nx3xla - скрытое имя класса anon), который, конечно, не существует в моей базе данных..
Соответствующие части тестового класса
public function setUp()
{
parent::setUp();
$this->testClass = new class extends Model {
use Contactable;
public function emails()
{
return $this->belongsToMany('App\Email')->withPivot('default');
}
};
}
/** @test */
public function it_can_return_the_default_email_for_a_model()
{
$email = factory(\App\Email::class)->make();
$this->testClass->setRelation('emails', $email);
$this->assertEquals($email->id, $this->testClass->defaultEmail());
}
Соответствующие части признака (для простоты)
abstract public function emails();
/**
* Return the default email if exists
*
*/
public function email()
{
$email = $this->emails()->wherePivot('default', true)->first() ?? $this->emails()->first();
return $email;
}
Я ожидаю, что тест пройденно на самом деле я получаю это сообщение об ошибке:
PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка;проверьте руководство, которое> соответствует версии вашего сервера MySQL для правильного синтаксиса, чтобы использовать> рядом с. php0x10c63a39e_id
как pivot_contactable_test.php0x10c63a39e_
id
, `contactable 'в строке 1
Мой вопрос был бы, этоЕсть ли способ сделать эту работу в текущей настройке?Или я должен подойти к этому тесту по-другому?например.тестирование реальной модели, которая использует черту?Хотя неохотно делать это, так как, если я уберу черту из этой модели, тесты не пройдут.Любая помощь будет принята с благодарностью, спасибо!