Laravel Test Custom Blade Если - PullRequest
       4

Laravel Test Custom Blade Если

0 голосов
/ 23 июня 2018

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

<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Filesystem\Filesystem;
use Illuminate\View\Compilers\BladeCompiler;

class BladeIfAdminStatementTest extends TestCase
{
    public function testIfAdminStatementAreCompiled()
    {
        $compiler = new BladeCompiler(\Mockery::mock(Filesystem::class), __DIR__);

        $string = '@admin test @endadmin';
        $expected = '<?php if(auth->check() && auth()->user()->isAdmin()): ?> test <?php endif; ?>';

        $this->assertEquals($expected, $compiler->compileString($string));
    }
}

В AppServiceProvider.php

<?php


...

public function boot()
{
    \Blade::if('admin', function () {
        return auth()->check() && auth()->user()->isAdmin();
    });
}

Когда я запускаю phpunit, я получаю:

Failed asserting that two strings are equal.
Expected :'<?php if(auth->check() && auth()->user()->isAdmin()): ?> test <?php endif; ?>'
Actual   :'@admin  test @endadmin'

Когда я пытаюсь изменить $string с @admin test @endadmin на @if(true) test @endif и запустить phpunit:

Failed asserting that two strings are equal.
Expected :'<?php if(auth->check() && auth()->user()->isAdmin()): ?> test <?php endif; ?>'
Actual   :'<?php if(true): ?> test <?php endif; ?>'

Обратите внимание, что это не удалось, но все равно оператор @if скомпилированправильно, в то время как мой пользовательский оператор @admin не является.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Просто получите доступ к методу compileString следующим образом:

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Support\Facades\Blade;


class BladeIfAdminStatementTest extends TestCase
{
    public function testIfAdminStatementAreCompiled()
    {

        $bladeSnippet = '@admin test @endadmin';
        $expectedCode = '<?php if(auth->check() && auth()->user()->isAdmin()): ?> test <?php endif; ?>';

        $this->assertEquals($expectedCode, Blade::compileString($bladeSnippet));
    }
}
0 голосов
/ 23 июня 2018

compileString скомпилирует строку и вернет вам результат кода.

Каждый оператор лезвия будет оцениваться и затем возвращаться.

Вы пытались установить результат вместо php-кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...