使用管弦乐队/测试台时,Mix清单不存在

时间:2019-02-28 19:12:30

标签: php laravel phpunit

使用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测试包。那么,Horizo​​n套件在我不能做的同时如何进行测试?什么是重写mix()助手,以确保公用路径位于我的软件包public路径而不是orchestral/testbench路径上?

2 个答案:

答案 0 :(得分:0)

有两种方法可以覆盖public_path()返回的路径,以确保mix()函数可以找到mix-manifest.json文件。

  1. 一种方法是将public_path()方法完全覆盖自定义程序包。在声明任何好的函数之前,请先使用Laravel使用if (!function_exists()) {},因为我们可以在包中定义自己的public_path()函数。但是,我们需要确保在Laravel helper方法之前加载重写函数,这是另一个主题。
  2. 最简单的方法是从发生问题的特定PHPUnit测试中更改Laravel IoC容器中的path.public
public function testBasicTest()
{
    $this->app->instance('path.public', $packagePublicDir);

    $response = $this->get('/');

    $response->assertStatus(200);
}

答案 1 :(得分:0)

我想你错过了npm install && npm run dev