【发布时间】:2019-02-28 19:12:29
【问题描述】:
使用 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() helper 函数正在寻找orchestral/testbench 包中的mix-manifest.json,它位于vendor 下,而不是我包中的public 文件夹。
我在包ServiceProvider.php 中尝试了以下操作,但也没有成功:
$this->app->bind('path.public', function() {
return base_path().'/../public';
});
此外,我看到laravel/horizon 包也使用layout.blade.php 文件上的mix() 辅助函数,就像我现在正在做的那样,它也使用orchestral/testbench 包进行测试。那么,当我做不到的时候,horizon package 是如何进行测试的呢?什么是要覆盖 mix() 帮助器以确保公共路径在我的包 public 路径而不是 orchestral/testbench 路径上?
【问题讨论】: