я собираюсь
Ошибка типа: Аргумент 1 передан
Tests \ Unit \ BaseUnitTestCase :: assertMockedMethodRuns () должен быть
экземпляр Tests \ Unit \ Closure, заданный экземпляр Closure
При прохождении закрытия моего assertMockedMethodRuns
метод
BaseUnitTestCase
namespace Tests\Unit;
use Tests\TestCase;
class BaseUnitTestCase extends TestCase
{
public function assertMockedMethodRuns(Closure $code)
{
try {
$code($this);
} catch (\Mockery\Exception\InvalidCountException $e) {
$this->assertTrue(False, "Mocked method did not run");
}
}
}
Маршрут Тест (где я звоню assertMockedMethodRuns
)
namespace Tests\Unit;
use App\Http\Controllers\PostController;
class RoutesTest extends BaseUnitTestCase
{
public function testGetPostList()
{
$mockPostController = \Mockery::mock('PostController');
$mockPostController->shouldReceive('index')->once();
$this->app->instance('PostController', $mockPostController);
$this->assertMockedMethodRuns(function() {
$this->call('GET','/post');
});
}
}
TestCase (откуда наследуется BaseTestCase)
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\RefreshDatabase;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication, DatabaseMigrations;
}
Кажется, что закрытие передается assertMockedMethodRuns
не имеет правильного пространства имен. Как это исправить?
вы пропустили и обратный слеш, чтобы сказать PHP Closure
класс должен быть найден в глобальном пространстве имен:
public function assertMockedMethodRuns(\Closure $code)
Других решений пока нет …