#laravel #phpunit
#laravel #phpunit
Вопрос:
У меня есть этот метод для сохранения нового пользователя
public function register(CreateUserRequest $request){
$file = $request->file('idcard');
$fileName = rand(0, 99999).$file->getClientOriginalName();
if($request->hasFile('idcard') amp;amp; $request->file('idcard')->isValid()){
$request->file('idcard')->move("images/idcard/", $fileName);
}
User::create([
'role_id' => 1,
'email' => $request->email,
'password' => $request->password,
'full_name' => $request->full_name,
'address' => $request->address,
'phone' => $request->phone,
'family_name' => $request->family_name,
'family_address' => $request->family_address,
'family_phone' => $request->family_phone,
'idcard' => $fileName,
'status' => 'unconfirmed',
'balance' => 0,
]);
Session::flash('success', 'Please check your email to activate your account.');
return redirect('/register');
}
И у меня есть этот модульный тест
public function testNewUserRegistration()
{
$this->visit('/register')
->type('This is full name', 'full_name')
->type('JL. Mulyorejo 226 D', 'address')
->type('085788884877', 'phone')
->type('Rizky Sugiarto', 'family_name')
->type('JL. Kandangan', 'family_address')
->type('085766669999', 'family_phone')
->attach('/var/www/html/autodealer/images/pics/banner_car.jpg', 'idcard')
->type('mail@yahoo.co.id', 'email')
->type('123456789', 'password')
->type('123456789', 'password_confirmation')
->press('Submit')
->seeInDatabase('users', ['email' => 'mail@yahoo.co.id', 'role_id' => 1, 'balance' => 0, 'status' => 'unconfirmed'])
->seePageIs('/register')
->see('Please check your email to activate your account.');
}
Если я протестирую свою функцию через браузер, она успешно введет базу данных и переместит файл.
Но когда я тестирую через PHPUnit, он проходит тест, успешно вводит базу данных, но изображение не перемещается.
Что-то не так с моим attach () или что-то еще не так?
Спасибо, любая помощь приветствуется.
Комментарии:
1. Файл не должен перемещаться.
attach
скопирует его как временный файл, точно так же, как это делает загрузка (когда вы загружаете со своего рабочего стола на веб-сайт, он не исчезает с вашего рабочего стола, верно?), И я подозреваю, что после выполнения теста файл удаляется из конечного пункта назначения в качестве шага очистки.2. @ceejayoz спасибо за объяснение, поэтому attach просто имитирует процесс загрузки.
3. Ну, скорее
move
функция Laravel перемещает временный файл, который был загружен на ваш сервер. Не имеет смысла перемещать файл, который используют ваши тесты, иначе тест завершится неудачей во второй раз, когда он не сможет найти файл. Тесты также могут очищаться после себя, что, я полагаю, и делает Laravel здесь.