Laravel - тестовая форма редактирования с тегом Value - PullRequest
0 голосов
/ 18 октября 2018

Я использую Laravel 5.6 для разработки сайта.

В настоящее время я хочу написать тестовые коды для сайта.Я также новичок в построении веб-сайта в целом, и это кривая обучения для меня, чтобы понять, что я делаю неправильно.

Я создал профиль на основе модели пользователя, и профиль должен редактироваться толькотолько для аутентифицированного пользователя.

Форма фактически работает без ошибок на стороне браузера, но после запуска phpunit произойдет сбой.

Тестовый скрипт:

/** @test */
public function an_authenticated_user_can_view_the_profile_page()
{
    // Generate fake instance of authenticated user
    $this->be($user = factory('App\User')->create());

    // Will get the URL
    $response = $this->get('/profile/'.$user->name);

    // Check whether the string exists
    $response->assertSee('Personal details for '.$user->name);
}

Контроллер:

class ProfileController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function show(User $user)
    {
        return view('user.profiles.show', compact('user'));
    }

    public function update(Request $request)
    {
        $this->validate(request(), [
            'company' => 'required',
            'street' => 'required',
            'city' => 'required',
            'zip_code' => 'required',
            'state' => 'required',
            'country' => 'required',
            'phone' => 'required',
        ]);

        $profile = \Auth::user()->profile;

        $profile->update($request->all());

        return back()->with('success', 'Profile updated!');
    }
}

Вид:

<div class="heading">
    <h3 class="text-uppercase">Personal details for {{ $user->name }}</h3>
</div>

<form method="POST" action="/profile">

{{method_field('PATCH')}}

{{csrf_field()}}

    <input type="hidden" value="{{ $user->profile->id }}" name="id">

    <div class="col-md-6">
        <div class="form-group">
            <label for="company">Company</label>
            <input id="company" type="text" class="form-control" name="company" value="{{ $user->profile->company }}" required>
        </div>
    </div>
</form>

Изображение с закомментированной формой теста: Закомментированная форма

Изображение без комментариев Форма теста: Не комментированная форма

Я довольно озадачен, почему мой тест не пройден, когда я вставляю форму стег значения.Если я закомментировал форму или просто удалил тег значения, тест пройдет успешно.

Я искал несколько дней и до сих пор не могу найти правильный ответ на этот вопрос.Я использую правильное утверждение?Что мне здесь не хватает?Любые материалы помогут мне лучше понять это.Спасибо!

1 Ответ

0 голосов
/ 18 октября 2018

Я нашел ответ.Это была фактически фабрика, которую я создал.

В модели User каждая регистрация приводит к созданию пустого профиля.

Это новый способ написания тестового скрипта:

/** @test */
public function an_authenticated_user_can_view_the_profile_page()
{
    //Generate a fake profile
    $profile = factory('App\Profile')->create();

    // Assign it to the user
    $user = $profile->user;

    // Authenticate the user
    $this->be($user);

    // Will get the URL
    $response = $this->get('/profile/'.$user->name);

    // Check whether the string exists
    $response->assertSee('Personal details for '.$user['name']);
}
...