我正在编写一些单元测试来测试我的 Laravel 5 应用程序中的 API 端点,许多端点需要用户身份验证。我不想在每个测试中都使用相同的用户帐户创建代码,而是想定义一个 RegistersUsers
特征以用于测试类,它将有一个 registerUser()
方法。
我的tests
目录的目录结构是这样的:
/tests
/Traits
RegistersUsers.php
TestCase.php
UserTest.php
我通过添加此命名空间声明为 TestCase.php
和 UserTest.php
命名空间:
namespace MyappTests;
我已经命名空间 RegistersUsers.php
像这样:
namespace MyappTests\Traits;
我的 UserTest
看起来像这样,带有命名空间和 use
声明,这样我就可以利用 RegistersUsers
。
<?php
namespace MyappTests;
use MyappTests\Traits\RegistersUsers;
class UserTest extends TestCase
{
use RegistersUsers;
// ... rest of the class
但是,当我运行测试时,PHPUnit 死于 fatal error :
Trait 'MyappTests\Traits\RegistersUsers' not found in /home/vagrant/demo-app-net/tests/UserTest.php on line 9
据我所知,我的命名空间是正确的,应该可以找到我的特征。我一直在兜圈子,似乎无法弄清楚。
最佳答案
我猜 traits 文件夹中有 trait,自动加载器中不再考虑该 trait。
为了更正此问题,您应该打开 composer.json
,找到 autoload-dev
部分并将其更改为类似以下内容...
"autoload-dev": {
"classmap": [
"tests/TestCase.php",
"tests/Traits/"
]
},
这应该会将该文件夹中的任何特征添加到自动加载器中。
编辑
评论中提出了一些额外的想法。如果您要维护正确的文件夹/命名空间结构,最好使用 psr-4 自动加载而不是维护类映射。
"autoload-dev": {
"psr-4": {
"MyappTests\\": "tests/"
}
},
此外,当您扩展 TestCase
时,它不会将逻辑放在特征中以注册用户以用于测试,而是引入一个辅助方法来以特定用户身份登录。你会像这样使用它......
$user = User::find($id);
$this->be($user);
关于php - 在 Laravel 5 单元测试中找不到特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31253706/