我能够设置PHPUnit并从工作台包进行一些基本测试,但我发现我无法使用我的工作台外观或对使用Illuminate组件的任何方法进行任何测试(例如,我的测试获取使用Config::get()
的东西失败了,因为应用程序尚未真正启动,因此外观不存在)。我阅读了几个站点并发现Orchestral Testbench软件包应该能够在CLI上引导应用程序并允许进行这种测试,因此我将其安装在我的主应用程序composer.json
文件中并运行{{1 }}。一切安装得很好,显然。我的工作台包工作正常 - 服务提供者和外观都在composer update orchestra/testbench
中设置,我的测试路由调用外观并在我的包配置文件中输出一个虚拟字符串按预期工作。所以我知道workbench包设置正确,这意味着我的测试必须设置错误。这是我的匿名测试文件:
app/config/app.php
当我从CLI运行class FrameworkTests extends \Orchestra\Testbench\TestCase
{
protected function getPackageProviders()
{
return array('MyVendor\MyPackage');
}
protected function getPackageAliases()
{
return array(
'MyVendor' => 'MyVendor\Facade'
);
}
public function testGetConfigValue()
{
$this->assertStringStartsWith('foo', MyPackage::getConfigValue());
}
}
时,出现此错误:
phpunit
我不知道从哪里开始,也不知道要查看哪些文件。除非我做错了什么,否则使用Testbench并不像自述文件那样简单......
ETA:睡觉后再靠近一点。我意识到Fatal error: Class 'MyVendor\MyPackage' not found in /home/tmountjr/projects/myproject/workbench/myvendor/my-package/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 158
和getPackageProviders
可能需要与getPackageAliases
中的内容相似,因此我分别使用app/config/app.php
和MyVendor\MyPackage\MyPackageServiceProvider
修改了条目。现在我在测试中遇到错误:
MyVendor\MyPackage\Facades\MyPackage
我认为这意味着Facade部分不起作用,因为该Facade应采用非静态类方法并使其可用,就好像它是静态的一样,对吧?
答案 0 :(得分:1)
除非您精通Laravelese,否则文档中没有说清楚的是,重载的getPackageProviders()
和getPackageAliases()
方法应该返回与providers
和{{完全相同的行1 {} aliases
文件中的条目。 (文档看起来使用的只是供应商和软件包名称的略有不同的命名,而不是实际的条目。)当然,这对我来说在盯着它几个小时之后对我有意义,但它并没有立即明确文档。希望如果其他人有这个问题并做出与我相同的假设,这将有所帮助。