Mockery无法计算Facade上的方法调用

时间:2014-11-20 17:30:29

标签: testing laravel phpunit mockery laravel-5

一个简单的测试存在问题,根本没有通过。 我在控制器中有一个动作:

/**
 * @Get("/parse")
 * @param Dispatcher $dispatcher
 * @return string
 */
public function parse(){
    $xml_file = public_path()."/dummy.xml";
    //File::get($xml_file); Tried this as well
    $file = $this->file->get($xml_file);
    return $file;
}

在测试中我有一个方法:

/**
 * A basic functional test example.
 *
 * @return void
 */
public function testBasicExample(){
        File::shouldReceive("get")->once();
        $this->call('GET', '/parse');
}

在Laravel文档中,他们说每个Facade都可以直接进行模拟,而无需实例化,但是测试从未通过,我得到了例外:

Mockery\Exception\InvalidCountException: Method get() from Mockery_0 should be called exactly 1 times but called 0 times.

PS:我有Laravel 5,在测试类上我有泪下方法以防万一你想知道。

1 个答案:

答案 0 :(得分:1)

终于找到了解决方案。

我没有使用File,facade,而是通过构造函数注入FileSystem依赖项,并在单元测试中模拟它,并将模拟对象传递到 IoC Container ,并且仅这种方式有效,否则在Laravel 5上,Mocking Facades无法正常工作,shouldReceive()没有按照Laravel Docs的说法进行计数。

亲切的问候