У меня есть следующие тесты и правила проверки:
/** @var \App\Http\Requests\StorePopularClientRequest*/
private $rules;
/** @var \Illuminate\Validation\Validator */
private $validator;
public function __construct($name = null, array $data = array(), $dataName = '') {
parent::__construct($name, $data, $dataName);
$this->createApplication();
}
public function setUp(): void
{
parent::setUp();
$this->adminUser = $this->createUser();
$this->businessUser = $this->createUser('Business');
$this->popularClients = factory(PopularClient::class, 20)->create()->each(function($client) {
static $order = 1;
$client->order = $order;
$client->save();
$order++;
});
$this->validator = app()->get('validator');
$this->rules = (new StorePopularClientRequest())->rules();
}
public function validationProvider()
{
/* WithFaker trait doesn't work in the dataProvider */
$faker = Factory::create(Factory::DEFAULT_LOCALE);
$file = factory(Attachment::class)->create(['category' => 'logo']);
return [
'request_should_pass_when_data_is_provided' => [
'passed' => true,
'data' => [
'name' => $faker->company(),
'description' => $faker->sentence($nbWords = 20, $variableNbWords = true),
'order' => 1,
'file' => [
"id" => $file->id,
"name" => $file->name,
]
]
]
];
}
/**
* @test
* @dataProvider validationProvider
* @param bool $shouldPass
* @param array $mockedRequestData
*/
public function validation_results_as_expected($shouldPass, $mockedRequestData)
{
$this->assertEquals(
$shouldPass,
$this->validate($mockedRequestData)
);
}
protected function validate($mockedRequestData)
{
return $this->validator
->make($mockedRequestData, $this->rules)
->passes();
}
А внутри StorePopularClientRequest
У меня есть следующие правила
public function rules()
{
return [
"name" => [
'required','string',
],
"description" => [
'required', 'string', 'min:5',
],
'order' => ['required', 'integer'],
'file' => ['required', 'array'],
'file.id' => ['required', 'exists:attachments,id'],
'file.name' => ['required', 'exists:attachments,name'],
];
}
Все эти правила работают правильно, кроме exists:attachments, name
, exists:attachments,id
, из-за использования RefreshDatabase
, если комментарий RefreshDatabase
, это работает.Так есть ли способ не обновить базу данных до завершения всех тестов, а затем обновить базу данных?
Теперь фабрика вложений работает и создает данные вложений в таблице attachments
, но когда я запускаю тест,Таблица вложений обновляется перед тестированием, и существующее правило для вложения недействительно