Вызов PHP-метода из другого класса

#php #laravel #methods #laravel-dusk #browser-testing

#php #laravel #методы #laravel-dusk #тестирование браузера

Вопрос:

На этот вопрос определенно был дан ответ не один раз. Но я не понимаю, что это для моего случая.

Итак, я пишу браузерный тест для части нашего проекта.

Функция заключается в том, что есть пользователи, которые могут входить в систему, и другие, которым это запрещено. Итак, я написал 2 теста. TestA. пытается войти в систему без разрешений, и я проверяю, видно ли всплывающее окно «что-то пошло не так». Другой тестируемый является зарегистрированным пользователем. Я проверяю, может ли он добраться до страницы «магазин».

Итак, я написал метод в классе LoginPage.php

класс LoginPage.php

  public function guiLoginUser(Browser $browser)
    {
        $browser->type('#email', 'normal.user______@hey.ch')
            ->type('#password', 'ThisCanBeWhatever2')
            ->click('#login');

    }

    public function guiLoginNoUser(Browser $browser)
    {
        $browser->type('#email', 'not.a.user______@nouser')
            ->type('#password', 'ThisCanBeWhatever')
            ->click('#login');
  

На данный момент наш проект не проверяет пароль, поскольку у нас нет доступа к базе данных.

Этот класс содержит testA и TestB. Я буду показывать только тест B, поскольку testA более или менее тот же, просто используется другой emai.

     public function testB(){
    $this->browse(function ($browser) {
        $browser
            // URL:
            ->visit('/login');
            // Login:
        $browser->visit(new LoginPage()){
        $this->guiLoginNormalUser($browser)
        }
        // Action:
            ->assertSee("Shop");
    });


}
  

Я знаю, что кодовая доза не работает, но я новичок в ООП, и я не понимаю, как вызвать метод другого класса.

Я надеюсь, что кто-нибудь сможет мне помочь.

заранее спасибо

Janick

Комментарии:

1. (new LoginPage())->guiLoginNormalUser($browser) должен это сделать!

2. Эй, спасибо, кажется, это работает, я все еще получаю ошибки, но я буду пробовать себя для следующих шагов. Всегда задаешь глупые вопросы с простыми ответами 😉

3. Тогда я сделаю это ответом!

Ответ №1:

Вместо

  new LoginPage()){
    $this->guiLoginNormalUser($browser)
    }
  

сделайте это:

 (new LoginPage())->guiLoginNormalUser($browser)
  

квадратные скобки вокруг new LoginPage() необходимы, чтобы иметь возможность ссылаться на этот новый объект позже с ->

В основном это то же самое, что и выполнение

 $loginPage = new LoginPage();
$loginPage->guiLoginNormalUser($browser);
  

Но поскольку вы не можете передать два оператора, нам нужно сжать его до oneliner.

Комментарии:

1. Отлично, теперь понял 😉