Laravel Ошибка click does not exist используя phpunit 7

mstdmstd

Новичок
Всем привет!
Просматривая примеры использования phpunit в laravel 5.6 вижу описание примеров с вызовом имитации нажатия на кнопку, например тут https://laravel.ru/docs/v5/testing :
PHP:
public function testBasicExample()
{
  $this->visit('/')
       ->click('О нас')
       ->seePageIs('/about-us');
}

Но при вызове метода ->click у меня ошибка

PHP:
<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class VotesAdminCrudTest extends TestCase   //   vendor/bin/phpunit tests/Feature/VotesAdminCrudTest.php
{
    use funcsTrait;
    use DatabaseMigrations;
    public function testVotesListing()
    {
        $response                     = $this->actingAs($loggedUser)->get('/admin/votes');
        $response->assertStatus(200);
        $response->assertSee( htmlspecialchars('Votes Listing',ENT_QUOTES));
        ...
Код выше работает нормально и отображает ошибку если написать другой текст для проверки



Я пытался сделать так :
PHP:
      $this->actingAs($loggedUser)->get('/admin/votes')->
            click('Add')
             ->seePageIs('/admin/vote/create')
             ->assertSee( 'Create vote');
то ошибка:
Код:
BadMethodCallException: Method Illuminate\Http\Response::click does not exist.
И непонятно почему - я что-то не подключил или не от того класса унаследовался ?
$this - это мой контрол унаследованный от TestCase ?


Не вижу почему у меня не работает?


В composer.json :
Код:
{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": "^7.1.3",
        "doctrine/dbal": "^2.8",
        "fideloper/proxy": "^4.0",
        "intervention/image": "^2.4",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0",
        "laravelcollective/html": "^5.4.0",
        "proengsoft/laravel-jsvalidation": ">2.2.0",
        "wboyz/laravel-enum": "^0.2.1",
        "yajra/laravel-datatables-oracle": "^8.7"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.1",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0"
    },
Спасибо!
 

jonjonson

Охренеть
Очевидно же, что get('/admin/votes') возвращает объект от Illuminate\Http\Response.
$this здесь не причём
 

mstdmstd

Новичок
get_class($response) возвращает Illuminate\Foundation\Testing\TestResponse

если в заголовке подключить
PHP:
use Illuminate\Http\Response;
...
use Tests\TestCase;
То та же самая ошибка.
Видимо причина в этом, но непонятно почему и как ее исправить?
 

fixxxer

К.О.
Партнер клуба
Не надо путать теплое с мягким, HTTP testing и Browser testing - это две большие разницы.

HTTP testing [1] - это получить ответ (условно говоря, curl-ом). Куда там кликать?

А вот Browser testing [2] - это тестирование через headless browser.

[1] https://laravel.com/docs/5.6/http-tests
[2] https://laravel.com/docs/5.6/dusk

И рекомендую читать официальную документацию по приведенным ссылкам, а не напевы Рабиновича на левых сайтах.
 

AmdY

Пью пиво
Команда форума
@fixxxer по ссылке тоже неплохой ресурс, ребята проделывают неплохую работу плюс помечают изменения, но от оригинальной доки отстают.
 

fixxxer

К.О.
Партнер клуба
Да какая разница? Любой вторичный источник будет менее точен, чем первичный. А если программист не в состоянии прочитать официальную документацию на английском языке, он профессионально непригоден.
 
Сверху