master

laravel/framework

Last updated at: 29/12/2023 09:25

TestComponent.php

TLDR

This file contains the TestComponent class, which is used for testing Laravel components. It provides methods for asserting the content of the rendered component.

Methods

assertSee($value, $escape = true)

Asserts that the given string is contained within the rendered component.

  • $value (string): The string to search for.
  • $escape (boolean): Optional. Specifies whether the $value should be escaped. Default is true.

assertSeeInOrder($values, $escape = true)

Asserts that the given strings are contained in order within the rendered component.

  • $values (array): An array of strings to search for.
  • $escape (boolean): Optional. Specifies whether the $values should be escaped. Default is true.

assertSeeText($value, $escape = true)

Asserts that the given string is contained within the rendered component text (stripping HTML tags).

  • $value (string): The string to search for.
  • $escape (boolean): Optional. Specifies whether the $value should be escaped. Default is true.

assertSeeTextInOrder($values, $escape = true)

Asserts that the given strings are contained in order within the rendered component text (stripping HTML tags).

  • $values (array): An array of strings to search for.
  • $escape (boolean): Optional. Specifies whether the $values should be escaped. Default is true.

assertDontSee($value, $escape = true)

Asserts that the given string is not contained within the rendered component.

  • $value (string): The string to search for.
  • $escape (boolean): Optional. Specifies whether the $value should be escaped. Default is true.

assertDontSeeText($value, $escape = true)

Asserts that the given string is not contained within the rendered component text (stripping HTML tags).

  • $value (string): The string to search for.
  • $escape (boolean): Optional. Specifies whether the $value should be escaped. Default is true.

Classes

Class TestComponent

This class is used for testing Laravel components. It implements the Stringable interface and provides methods for asserting the content of the rendered component. It also allows access to properties and methods of the underlying component.

<?php

namespace Illuminate\Testing;

use Illuminate\Testing\Assert as PHPUnit;
use Illuminate\Testing\Constraints\SeeInOrder;
use Stringable;

class TestComponent implements Stringable
{
    /**
     * The original component.
     *
     * @var \Illuminate\View\Component
     */
    public $component;

    /**
     * The rendered component contents.
     *
     * @var string
     */
    protected $rendered;

    /**
     * Create a new test component instance.
     *
     * @param  \Illuminate\View\Component  $component
     * @param  \Illuminate\View\View  $view
     * @return void
     */
    public function __construct($component, $view)
    {
        $this->component = $component;

        $this->rendered = $view->render();
    }

    /**
     * Assert that the given string is contained within the rendered component.
     *
     * @param  string  $value
     * @param  bool  $escape
     * @return $this
     */
    public function assertSee($value, $escape = true)
    {
        $value = $escape ? e($value) : $value;

        PHPUnit::assertStringContainsString((string) $value, $this->rendered);

        return $this;
    }

    /**
     * Assert that the given strings are contained in order within the rendered component.
     *
     * @param  array  $values
     * @param  bool  $escape
     * @return $this
     */
    public function assertSeeInOrder(array $values, $escape = true)
    {
        $values = $escape ? array_map('e', $values) : $values;

        PHPUnit::assertThat($values, new SeeInOrder($this->rendered));

        return $this;
    }

    /**
     * Assert that the given string is contained within the rendered component text.
     *
     * @param  string  $value
     * @param  bool  $escape
     * @return $this
     */
    public function assertSeeText($value, $escape = true)
    {
        $value = $escape ? e($value) : $value;

        PHPUnit::assertStringContainsString((string) $value, strip_tags($this->rendered));

        return $this;
    }

    /**
     * Assert that the given strings are contained in order within the rendered component text.
     *
     * @param  array  $values
     * @param  bool  $escape
     * @return $this
     */
    public function assertSeeTextInOrder(array $values, $escape = true)
    {
        $values = $escape ? array_map('e', $values) : $values;

        PHPUnit::assertThat($values, new SeeInOrder(strip_tags($this->rendered)));

        return $this;
    }

    /**
     * Assert that the given string is not contained within the rendered component.
     *
     * @param  string  $value
     * @param  bool  $escape
     * @return $this
     */
    public function assertDontSee($value, $escape = true)
    {
        $value = $escape ? e($value) : $value;

        PHPUnit::assertStringNotContainsString((string) $value, $this->rendered);

        return $this;
    }

    /**
     * Assert that the given string is not contained within the rendered component text.
     *
     * @param  string  $value
     * @param  bool  $escape
     * @return $this
     */
    public function assertDontSeeText($value, $escape = true)
    {
        $value = $escape ? e($value) : $value;

        PHPUnit::assertStringNotContainsString((string) $value, strip_tags($this->rendered));

        return $this;
    }

    /**
     * Get the string contents of the rendered component.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->rendered;
    }

    /**
     * Dynamically access properties on the underlying component.
     *
     * @param  string  $attribute
     * @return mixed
     */
    public function __get($attribute)
    {
        return $this->component->{$attribute};
    }

    /**
     * Dynamically call methods on the underlying component.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->component->{$method}(...$parameters);
    }
}