【发布时间】:2018-06-05 20:05:06
【问题描述】:
我正在尝试为我在 Drupal 8 上编写的自定义模块编写测试并不断收到错误,此时我没有想法。这是错误:
Error: Class 'Drupal\mypackage\Services\Config\MyClassServiceConfig' not found
PhpUnit 类在
modules\custom\mypackage\tests\src\Unit\mypackageUserAuthTest
这里是代码
class mypackageUserAuthTest extends UnitTestCase
{
protected $user;
protected $loginService;
public function setUp()
{
parent::setUp();
$this->loginService = new LoginService();
$this->user = [
'username' => 'xxx',
'password' => 'xxx',
'deviceId' => 'xxx',
'some-token' => 'xxx'
];
}
/** @test */
public function that_we_can_authenticate_a_user()
{
$IsUserLoggedIn = $this->loginService->login($this->user['username'], $this->user['password']);
$this->assertTrue($IsUserLoggedIn);
}
现在loginService 代码中的方法login
<?php
namespace Drupal\mypackage\Rest;
use GuzzleHttp\Exception\ClientException;
use Drupal\mypackage\Services\RestServiceFactory;
use Drupal\mypackage\Services\Config\MyClassServiceConfig;
class LoginService
{
public function login($username, $password)
{
$configs = new MyClassServiceConfig(null, "mobile", "v1");
$client = RestServiceFactory::create($configs);
try {
$response = $client->post('login', [
'json' => [
'username' => $username,
'password' => $password,
'deviceId' => 'onepiece',
],
]);
return json_decode($response->getBody(), true);
} catch (ClientException $exception) {
switch ($$exception->getResponse()->getStatusCode()) {
case 402: // This only applies to co members
throw new SubscriptionRequiredException();
case 403:
throw new BlockedAccountException();
case 409:
throw new DuplicateEmailException();
case 410:
throw new PasswordDoesNotExistException();
}
throw $exception;
}
}
}
pwdMyClassServiceConfig 类目录上的结果
/var/www/cms/web/modules/custom/mypackage/src/Services/Config
但它似乎在$configs = new MyClassServiceConfig(null, "mobile", "v1"); 行失败,出现前面提到的错误:
1) Drupal\Tests\mypackage\Unit\mypackageUserAuthTest::that_we_can_authenticate_a_user
Error: Class 'Drupal\mypackage\Services\Config\MyClassServiceConfig' not found
顺便说一句,我正在使用 drupal 项目结构 (https://github.com/drupal-composer/drupal-project)
【问题讨论】:
-
试试这个命令
composer -o dump-autoload如果转储优化的自动加载器解决了你的问题,但不优化它仍然显示它,你的目录或文件名中的某个地方有错字,这会阻止 PSR-4 或 PSR- 0 自动加载。 -
@KevinWenger 我使用路由调用模块时没有错误。错误
class not found仅在我从单元测试类中调用它时出现。好像该类未正确自动加载,但仅在由 phpunit 调用时 -
是的,我知道这就是我要求您运行
composer -o dump-autoload的原因。您是否尝试运行此命令然后重新运行phpunit?它仍然不工作?这似乎是您的目录或文件中的错字 - 但我不确定 - 此命令是否会断言它 - 或不会:D -
@KevinWenger 是的,我每次都在运行
$ composer dump-autoload && vendor/bin/phpunit -c web/core --debug --verbose web/modules/custom/mypackage/。好的,所以我运行了composer -o dump-autoload然后通过它的路径加载模块并且它工作了。我在整个 phpunit 中加载它,但遇到了最初的问题......已经好几天了,这东西要了我的命...... -
您能否进入
MyClassServiceConfig的目录并运行pwd,然后将结果传递到此处-我只是想确定这不是您的目录名称中的拼写错误。您能否在同一个目录中运行ls -la以确保它注意文件名拼写错误。然后,您可以将此结果添加到问题本身。
标签: phpunit drupal-modules drupal-8