在单元测试时使用Laravel辅助函数

sea*_*saw 14 php phpunit unit-testing laravel-4

我正在测试一个使用辅助函数的类.我正在测试的功能如下:

public function upload(UploadedFile $file)
{
    $file = $file->move(base_path() . '/temp');
    $file = new FileSystemPicture($file);

    return $file;
}
Run Code Online (Sandbox Code Playgroud)

当我运行测试并且它命中辅助函数时,它说:

PHP Fatal error:  Call to a member function make() on a non-object
Run Code Online (Sandbox Code Playgroud)

我已经跟踪了辅助函数,它是以下代码:

function base_path($path = '')
{
    return app()->make('path.base').($path ? '/'.$path : $path);
}
Run Code Online (Sandbox Code Playgroud)

我知道我收到了错误,因为"app"尚未创建,因为我只测试了我的类,而不是整个应用程序.是否有其他有效的方法来获取我的项目的根目录或有没有办法强制"app"加载,以便它可以在此功能中使用?

Cmo*_*les 17

我有这个问题,解决了确保:

  1. 我的测试类扩展了TestCase.
  2. 如果我的测试类有一个setUp()方法,它会调用parent::setUp()

app_path()和类似的函数在那之后起作用.

  • 需要明确的是,测试类应该扩展`Tests\TestCase`,而不是`PHPUnit\Framework\TestCase` (2认同)