0

まったく合格しない簡単なテストに問題があります。コントローラー内にアクションがあります:

/**
 * @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 を持っており、Test Class には、ご参考までに、tearDown メソッドがあります。

4

1 に答える 1

1

最後に解決策を見つけました。

ファイル、ファサードを使用する代わりに、FileSystemコンストラクターを介して依存関係を注入し、単体テストでそれをモックし、モックされたオブジェクトをIoC Containerに渡しました。その方法でのみ機能し、そうでなければ Laravel 5 では、ファサードのモックは機能しません。shouldReceive()Laravel Docsから言われたように、カウントを維持していません。

敬具

于 2014-11-24T17:45:05.990 に答える