Tôi có dạng như sau thành lập năm Laravel:lớp khung Laravel không có sẵn trong cung cấp dữ liệu PHPUnit
Trong /app/controllers/MyController.php
:
class MyController extends BaseController {
const MAX_FILE_SIZE = 10000;
// ....
}
Trong /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);
}
}
Tuy nhiên, khi tôi chạy vendor/bin/phpunit
Tôi ge t các lỗi sau:
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
Nếu tôi loại bỏ các tham chiếu đến lớp MyController
trong myDataProvider()
và thay thế bằng một hằng số đen thì kiểm tra hoàn tất thành công.
Ngoài ra, tôi có thể đặt tham chiếu đến MyController::MAX_FILE_SIZE
bên trong phương thức testMyController()
thực tế và thử nghiệm cũng hoàn tất thành công.
Dường như các thiết lập tự động load cho các lớp khuôn khổ Laravel không được thiết lập cho đến khi sau phương pháp cung cấp dịch vụ dữ liệu đang được gọi, nhưng trước các phương pháp thử nghiệm thực tế được gọi là. Có cách nào xung quanh điều này để tôi có thể truy cập các lớp khung của Laravel từ bên trong một nhà cung cấp dữ liệu PHPUnit không?
LƯU Ý: Tôi gọi PHPUnit trực tiếp từ dòng lệnh và không phải từ bên trong một IDE (như NetBeans). Tôi biết một số người đã có vấn đề với điều đó, nhưng tôi không nghĩ rằng áp dụng cho vấn đề của tôi.
Có thể an toàn hơn khi gọi '$ this-> refreshApplication();', vì điều này cũng đặt môi trường thành 'testing'. Bạn cũng không nhất thiết phải tạo một hàm tạo, bạn chỉ có thể gọi '$ this-> refreshApplication();' trực tiếp trong nhà cung cấp dữ liệu của bạn (nếu bạn chỉ có một người tôi đoán). – Antonio