Mam coś jak następuje skonfigurować w laravel:klas ramowe laravel niedostępne w PHPUnit dostawcy danych
W /app/controllers/MyController.php
:
class MyController extends BaseController {
const MAX_FILE_SIZE = 10000;
// ....
}
W /app/tests/MyControllerTest.php
:
class MyControllerTest extends TestCase {
public function myDataProvider() {
return [
[ MyController::MAX_FILE_SIZE ]
];
}
/**
* @dataProvider myDataProvider
*/
public function testMyController($a) {
// Just an example
$this->assertTrue(1 == 1);
}
}
Jednak po uruchomieniu vendor/bin/phpunit
I ge t następujący błąd:
PHP Fatal error: Class 'Controller' not found in /home/me/my-app/app/controllers/BaseController.php on line 3 Fatal error: Class 'Controller' not found in /home/me/my-app/app/controllers/BaseController.php on line 3
Jeśli usunąć odniesienie do klasy MyController
w myDataProvider()
i zastąpić go dosłownym stałą następnie test zakończy się pomyślnie.
Ponadto mogę umieścić odniesienia do MyController::MAX_FILE_SIZE
wewnątrz rzeczywistej metody testMyController()
, a test również zostanie pomyślnie zakończony.
Wydaje się, że konfiguracja autoloading dla klas ramowych laravel nie jest ustawiona aż po metoda dostawca danych jest powołanych, lecz przed rzeczywiste metody badań są nazywane. Czy jest jakiś sposób obejścia tego, aby uzyskać dostęp do klas ramowych Laravel z dostawcą danych PHPUnit?
UWAGA: Dzwonię PHPUnit bezpośrednio z linii poleceń, a nie z poziomu IDE (takie jak NetBeans). Wiem, że niektórzy ludzie mieli z tym problemy, ale nie sądzę, że dotyczy to mojego problemu.
Prawdopodobnie bezpieczniej jest wywołać '$ this-> refreshApplication();', ponieważ to ustawia także środowisko na 'testing'. Nie musisz też tworzyć konstruktora, możesz po prostu wywołać '$ this-> refreshApplication();' bezpośrednio w twoim dostawcy danych (jeśli tylko masz taki, który myślę). – Antonio