使用orchestral/testbench软件包创建自定义的Laravel软件包,该软件包可帮助软件包开发人员进行PHPUnit测试。因此,我的软件包位于其他位置,而不是完全在Laravel安装中。除了我在刀片视图中使用的mix()
函数以获取资源之外,其他所有功能都很好。
<script src="{{ asset(mix('js/app.js', 'vendor/trade')) }}"></script>
而且,我在web.php
中设置了以下测试路线:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function() {
return view('trade::_layouts.app');
});
此外,我在ExampleTest.php
文件中进行了以下功能测试:
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
我在运行phpunit
时看到以下错误:
Expected status code 200 but received 500.
Failed asserting that false is true.
在测试中转储$response
后,我看到了The Mix manifest does not exist.
错误。挖掘了一个小时后,我发现mix()
助手功能正在mix-manifest.json
下的orchestral/testbench
包中寻找vendor
而不是文件夹中的public
文件夹中。我的包裹。
我尝试在软件包ServiceProvider.php
中进行以下操作,但也无法正常工作:
$this->app->bind('path.public', function() {
return base_path().'/../public';
});
此外,我看到laravel/horizon
软件包也使用mix()
文件上的layout.blade.php
帮助函数,就像我现在正在做的那样,它也正在使用orchestral/testbench
测试包。那么,Horizon套件在我不能做的同时如何进行测试?什么是重写mix()
助手,以确保公用路径位于我的软件包public
路径而不是orchestral/testbench
路径上?
答案 0 :(得分:0)
有两种方法可以覆盖public_path()
返回的路径,以确保mix()
函数可以找到mix-manifest.json
文件。
public_path()
方法完全覆盖自定义程序包。在声明任何好的函数之前,请先使用Laravel使用if (!function_exists()) {}
,因为我们可以在包中定义自己的public_path()
函数。但是,我们需要确保在Laravel helper方法之前加载重写函数,这是另一个主题。path.public
。public function testBasicTest()
{
$this->app->instance('path.public', $packagePublicDir);
$response = $this->get('/');
$response->assertStatus(200);
}
答案 1 :(得分:0)
我想你错过了npm install && npm run dev