Laravel 模拟未执行
Laravel mocking is not executing
在我的 Laravel 6 单元测试中,我一直在尝试模拟服务 class,但调用正在转移到真实方法而不是模拟响应。这是我试图嘲笑的人 class -
class People
{
public static function checkCredentials($username, $password) {
// some code, which is not supposed to execute while unit testing.
}
}
负责执行此操作的控制器是-
class AuthController extends Controller {
public function login(Request $request) {
$auth = People::checkCredentials($request->username, $request->password);
dd($auth); // I am expecting mocked response here i.e., ['abc'].
}
}
这是我的测试class -
class LoginTest extends TestCase {
/** @test */
public function a_user_can_login() {
$this->mock(People::class, function ($mock) {
$mock->shouldReceive('checkCredentials')
->withArgs(['username', 'password'])
->once()
->andReturn(['abc']);
});
$this->assertTrue(true);
}
}
控制器中的转储返回真实响应而不是模拟响应。我需要帮助来理解我做错了什么。谢谢
为了模拟服务,服务必须作为服务容器注入。
目前您正在调用 People
class 的静态方法,而没有 class.
的实例化
$auth = People::checkCredentials($request->username, $request->password);
尝试将 class 作为服务容器注入,这样 Laravel 就可以捕获注入并模拟它。您可以将其类型提示作为函数的参数。
class AuthController extends Controller {
public function login(Request $request, $people People) {
$auth = $people::checkCredentials($request->username, $request->password);
dd($auth); // I am expecting mocked response here i.e., ['abc'].
}
}
在我的 Laravel 6 单元测试中,我一直在尝试模拟服务 class,但调用正在转移到真实方法而不是模拟响应。这是我试图嘲笑的人 class -
class People
{
public static function checkCredentials($username, $password) {
// some code, which is not supposed to execute while unit testing.
}
}
负责执行此操作的控制器是-
class AuthController extends Controller {
public function login(Request $request) {
$auth = People::checkCredentials($request->username, $request->password);
dd($auth); // I am expecting mocked response here i.e., ['abc'].
}
}
这是我的测试class -
class LoginTest extends TestCase {
/** @test */
public function a_user_can_login() {
$this->mock(People::class, function ($mock) {
$mock->shouldReceive('checkCredentials')
->withArgs(['username', 'password'])
->once()
->andReturn(['abc']);
});
$this->assertTrue(true);
}
}
控制器中的转储返回真实响应而不是模拟响应。我需要帮助来理解我做错了什么。谢谢
为了模拟服务,服务必须作为服务容器注入。
目前您正在调用 People
class 的静态方法,而没有 class.
$auth = People::checkCredentials($request->username, $request->password);
尝试将 class 作为服务容器注入,这样 Laravel 就可以捕获注入并模拟它。您可以将其类型提示作为函数的参数。
class AuthController extends Controller {
public function login(Request $request, $people People) {
$auth = $people::checkCredentials($request->username, $request->password);
dd($auth); // I am expecting mocked response here i.e., ['abc'].
}
}