Я пытаюсь смоделировать один статический метод в классе.Однако, если я вызываю смоделированный метод, переменные класса больше не найдены.Кажется, что весь класс подвергается насмешкам, а makePartial()
игнорируется.
Я создал ошибку в пустом проекте laravel.Вот соответствующий код:
AnotherController:
namespace App\Http\Controllers;
class AnotherController extends Controller
{
public function coolMethod()
{
logger(StaticController::$staticArray);
logger(StaticController::staticMethod('arg1'));
}
}
StaticController
namespace App\Http\Controllers;
class StaticController extends Controller
{
public static $staticArray = [
'foo',
'bar'
];
public static function staticMethod($arg1, $arg2 = [])
{
logger("The real static method");
logger(self::$staticArray);
}
}
Пример теста
namespace Tests\Feature;
use App\Http\Controllers\AnotherController;
use App\Http\Controllers\StaticController;
use Tests \ TestCase;
class ExampleTest extends TestCase
{
public function testStaticMock()
{
$mock = \Mockery::mock('alias:App\Http\Controllers\StaticController');
$mock
->makePartial()
->shouldReceive('staticMethod')
->withAnyArgs()
->andReturn("I'm the mocked return");
$anotherController = new AnotherController();
logger($anotherController->coolMethod());
logger(StaticController::staticMethod());
}
}
Вывод:
[16:01:24] user@shell [~/Development/Code/Laravel] $ vendor/phpunit/phpunit/phpunit -v
PHPUnit 6.5.13 by Sebastian Bergmann and contributors.
Runtime: PHP 7.0.14 with Xdebug 2.6.0
Configuration: /Users/.../Development/Code/Laravel/phpunit.xml
E 1 / 1 (100%)
Time: 183 ms, Memory: 12.00MB
There was 1 error:
1) Tests\Feature\ExampleTest::testStaticMock
Error: Access to undeclared static property: App\Http\Controllers\StaticController::$staticArray
/Users/.../Development/Code/Laravel/app/Http/Controllers/AnotherController.php:9
/Users/.../Development/Code/Laravel/tests/Feature/ExampleTest.php:22
ERRORS!
Tests: 1, Assertions: 1, Errors: 1.
Как видите, $staticArray
больше не может быть найдено, даже если оноопределены в исходном классе.
Любая помощь очень ценится!