我是OOP PHP世界的新手,所以如果我做错了,请随时纠正我。
为了使用JWT(JSON Web Token)函数,我需要在构造函数中实例化它,而使用test_registration_input_validation我尝试为RegisterController中的方法编写单元测试,但我无法访问它们,因为我可以' t实例化RegisterController。构造函数有一个输入参数,JWTAuth有自己的输入参数,所以它是一个无限循环。有什么想法吗?
class RegisterController extends Controller{
public $jwtauth;
public function __construct(JWTAuth $jwtauth){
$this->jwtauth = $jwtauth;
}
public function test_registration_input_validation(){
$register = new RegisterController(new JWTAuth());
答案 0 :(得分:1)
如果您正在为控制器编写单元测试,那么您应该模拟您的依赖项,而不是传递它们的实例,以便您可以隔离该组件。 Mockery开箱即用Laravel,非常适合这个用例。
我注意到你已经使用依赖注入来插入JWTAuth,这将使这更容易。您可以按如下方式创建JWTAuth的模拟:
$jwt = Mockery::mock('Tymon\JWTAuth\JWTAuth');
然后将其传递给控制器:
$register = new RegisterController($jwt);
然后,您可以在模拟上设置您需要的任何期望,并对应该返回的响应进行硬编码。例如:
$jwt->shouldReceive('getToken')->once()->andReturn('foo');
然后你应该能够调用控制器,只要你嘲笑了对JWTAuth的所有调用,它应该可以工作:
$response = $register->index();
您可能需要参考Mockery的文档来模拟您的所有期望,但这应该可以解决问题。