如何使用 laravel Facade 模拟引用传递参数?

How to mock pass-by-reference parameter using laravel Facade?

提问人:axsor 提问时间:8/26/2019 更新时间:8/26/2019 访问量:409

问:

我正在制作一个简单的 laravel 包来包装 bash 执行并使其能够模拟为 laravel 外观,但我有一个问题。

大多数运行 bash 命令的 Php 函数都使用引用传递参数,问题是,如何模拟方法的引用传递的返回值?

我的外墙:

class MyFacade
{
    public function run(string $command, &$return_val): string
    {
        return system($command, $return_val);
    }
}

我的测试:

$passByReferenceValue = 1;

MyFacade::shouldReceive('run')->with('ping google.com', $passByReferenceValue)
->once()->andReturn("PING RESULT");

$return = MyFacade::run('ping google.com', $passByReferenceValue);

$this->assertEquals(1, $passByReferenceValue);
$this->assertEquals("PING RESULT", $return);

它实际上有效,因为我设置了 $passByReferenceValue 的值并且它没有更改。我想要的是将空指针作为运行方法的第二个参数传递,并进行模拟以更改它。

例:

MyFacade::shouldReceive('run')->with('ping google.com', SOME_MAGIC_CODE_RETURNS_1)
->once()->andReturn("PING RESULT");

$resultCode = null;
$return = MyFacade::run('ping www.google.com', $resultCode)

$this->assertEquals(1, $resultCode);
$this->assertEquals("PING RESULT", $return);

谢谢

PHP Laravel 通过引用 Facade

评论


答: 暂无答案