[英]Using Laravel helper functions when unit testing
我正在測試一個使用輔助函數的類。 我正在測試的功能如下:
public function upload(UploadedFile $file)
{
$file = $file->move(base_path() . '/temp');
$file = new FileSystemPicture($file);
return $file;
}
當我運行測試並且它命中輔助函數時,它說:
PHP Fatal error: Call to a member function make() on a non-object
我已經跟蹤了輔助函數,它是以下代碼:
function base_path($path = '')
{
return app()->make('path.base').($path ? '/'.$path : $path);
}
我知道我收到了錯誤,因為“app”尚未創建,因為我只測試了我的類,而不是整個應用程序。 是否有其他有效的方法來獲取我的項目的根目錄或有沒有辦法強制“app”加載,以便它可以在此功能中使用?
我有這個問題,解決了確保:
setUp()
方法,則調用parent::setUp()
app_path()和類似的函數在那之后起作用。
有一種方法可以模擬使用app()
函數的輔助函數,與laravel環境完全隔離。 考慮到你的軟件包具有illuminate/support
依賴性,你可以這樣做:
<?php
class Test extends PHPUnit_Framework_TestCase
{
protected function mockApplication(array $methods = [])
{
return $this->getMock('Illuminate\Foundation\Application', $methods);
}
public function testHelperFunction()
{
$appMock = $this->mockApplication(['make']);
\Illuminate\Support\Facades\Facade::setFacadeApplication($appMock);
$testPath = "my/path";
$myPath = "otherPath";
$expectedValue = "{$testPath}/{$myPath}";
$appMock->expects($this->once())
->method('make')->with('path.base')
->will($this->returnCallback(function () use ($testPath) {
return $testPath;
}));
$this->assertSame($expectedValue, base_path($myPath));
}
}
我剛剛遇到這個問題,我的解決方案是將整個helpers.php內容包裝起來
if (!file_exists('newFunction')) {
這應該可以防止在第一個測試用例執行后重新聲明函數的嘗試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.