Использование констант классов в аннотациях PHPUnit

Руководство по PHPUnit показывает, что я могу использовать константы классов в аннотациях для @expectedExceptionCode, см. PHPUnit @expectedExceptionCode

Я пытаюсь использовать его в своей модели с пространством имен, которая начинается с Eloquent.
Когда я запускаю свои тесты, я получаю: «Неустранимая ошибка PHP: класс« Eloquent »не найден». Запуск приложения — это нормально, так что это зависит от юнит-тестов, не так ли?

Есть идеи?

namespace Foo\Models;

use \Eloquent;

class Bar extends Eloquent {
const ERRORCODE = 150;

...
}

class BarTest extends TestCase {

/**
* @expectedExceptionCode       Foo\Models\Bar::ERRORCODE
*/
public function testFoobar()
{
$name = 'foobar';
Bar::findBarOrFail($name);
}
}

В целях разъяснения:

PHP Fatal error:  Class 'Eloquent' not found in PathToProject/app/models/Bar.php

Обновить

После комментария @ j-boschieros я получил приведенный выше код! Спасибо друг!

Однако, когда я провоцирую исключение в тесте контроллера, фатальная ошибка все еще происходит.

Даже если я использую пространства имен или нет.

use \Eleoquent;
use Foo\Models\Bar;

class TestController extends TestCase {

/**
* @expectedExceptionCode       Foo\Models\Bar::ERRORCODE
*/
public function testStoreActionWithInvalidDatatyp ()
{
$this->call('POST', '/routeToException');
}

Обновление 2

Мои модульные тесты заработали, когда я расширяю \ Illuminate \ Database \ Eloquent \ Model вместо Eloquent.

namespace Foo\Models;

use \Illuminate\Database\Eloquent\Model;

class Bar extends Model {
const ERRORCODE = 150;

...
}

Это отличается от Ларавел Док. Это все еще хорошо?

2

Решение

Класс» \Eloquent на самом деле это псевдоним, который регистрируется во время выполнения фреймворком Laravel. Вы заставляете PHP анализировать файл класса модели до того, как эти псевдонимы были настроены, что приводит к сбою. Правильный подход к этому — просто избегать псевдонимов глобального пространства имен и использовать вместо них реальные имена классов (Illuminate\Database\Eloquent\Model вместо Eloquent в твоем случае). Вы можете найти список псевдонимов классов в app/config/app.php,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]