一个简单的测试存在问题,根本没有通过。 我在控制器中有一个动作:
/**
* @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,在测试类上我有泪下方法以防万一你想知道。
答案 0 :(得分:1)
终于找到了解决方案。
我没有使用File,facade,而是通过构造函数注入FileSystem
依赖项,并在单元测试中模拟它,并将模拟对象传递到 IoC Container ,并且仅这种方式有效,否则在Laravel 5上,Mocking Facades无法正常工作,shouldReceive()
没有按照Laravel Docs的说法进行计数。
亲切的问候