【发布时间】:2014-09-19 06:19:08
【问题描述】:
我能够设置 PHPUnit 并从工作台包进行一些基本测试,但我发现我无法使用我的工作台外观或对使用 Illuminate 组件的任何方法进行任何测试(例如,我的测试使用Config::get() 的东西失败了,因为应用程序还没有真正启动,所以那个门面不存在)。我浏览了几个站点,发现 Orchestral Testbench 包应该能够在 CLI 上引导应用程序并允许进行这种测试,所以我将它安装在我的主应用程序 composer.json 文件中并运行 composer update orchestra/testbench。显然,一切都安装得很好。我的工作台包工作得很好——服务提供者和门面都设置在app/config/app.php 中,我的测试路由调用门面并在我的包配置文件中输出一个虚拟字符串按预期工作。所以我知道工作台包设置正确,这意味着我的测试必须设置错误。这是我的匿名测试文件:
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());
}
}
当我从 CLI 运行 phpunit 时,我收到此错误:
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
我不知道从这里去哪里,也不知道要查看哪些文件。除非我做错了什么,否则使用 Testbench 并不像自述文件所说的那么简单......
ETA:在上面睡觉后离得更近了一点。我意识到getPackageProviders 和getPackageAliases 可能需要看起来像app/config/app.php 中的内容,所以我分别使用MyVendor\MyPackage\MyPackageServiceProvider 和MyVendor\MyPackage\Facades\MyPackage 修改了条目。现在我在测试中遇到错误:
Non-static method MyVendor\MyPackage\MyClass::getConfigValue() should not be called statically, assuming $this from incompatible context.
我认为这意味着 Facade 部分不起作用,因为该 Facade 应该采用非静态类方法并使其像静态一样可用,对吗?
【问题讨论】: