在Laravel中编写HTTP测试时模拟对象

时间:2018-12-21 09:57:35

标签: laravel mocking phpunit

因此,我有一个类名Verify,该类调用SMS供应商来验证otp。现在,我在Laravel中编写http测试。

如何编写HTTP测试,以便在执行该路由时不会将模拟Verify称为真正的实现。

1 个答案:

答案 0 :(得分:0)

在没有看到您的某些实现(包括测试和要测试的类)的情况下很难给出确切的答案,但是要检查的一件事是,在创建模拟之后,需要将其绑定到服务容器中

这是一个粗略的示例,对该类或其方法一无所知:

$mock = Mockery::mock(Verify::class);
$mock->shouldReceive('verify')
    ->once()
    ->andReturn(true);

App::instance(Verify::class, $mock);

然后确保无论在何处创建和使用Verify类,都可以从服务容器中检索实例。

$verify = App::make(Verify::class);
// instead of $verify = new Verify();

那时,您应该在测试期间拥有模拟实例,而不是真实类。有关绑定和服务容器的更多信息,请参见in the documentationand on Laracasts