我有一个使用Str::random()
的类,我想测试一下。
但是当我在测试中使用Str::shouldReceive('random')
时,我得到一个BadMethodCallException,说shouldReceive方法不存在。
我还尝试直接模拟类并将其绑定到IOC,但它会继续执行原始类,生成一个随机字符串,而不是我在模拟上设置的返回值。
$stringHelper = Mockery::mock('Illuminate\Support\Str');
$this->app->instance('Illuminate\Support\Str', $stringHelper);
//$this->app->instance('Str', $stringHelper);
$stringHelper->shouldReceive('random')->once()->andReturn('some password');
//Str::shouldReceive('random')->once()->andReturn('some password');
字符串
4条答案
按热度按时间1qczuiv01#
只要您还使用IoC来解析该类的绑定,您所尝试的方法就可以工作。
字符串
a6b3iqyw2#
你不能使用laravel Mock,因为Str::random()不是Facade。相反,您可以创建一个新类,其中包含一个设置测试环境方法。就像这样:
字符串
sdnqo3pr3#
根据Mockery docs,如果你想模拟公共静态方法,你应该使用alias。
因此,您可以:
字符串
ndasle7k4#
您将无法以这种方式模拟Illuminate\Support\Str(请参见mockery docs。这就是我测试它的方式。
在试图生成随机字符串的类中,您可以创建一个方法来生成随机字符串,然后在测试中覆盖该方法(实际上没有测试过的代码):
字符串