Я пишу модульный тест в Laravel 5.0, и в своем классе запросов я использую другую сумку для отображения сообщений об ошибках валидации.
Я использую это в моем файле:
/* ExampleRequest.php */
namespace App\Http\Requests;
use App\Http\Requests\Request;
use Illuminate\Support\Facades\Auth;
class ExampleRequest extends Request {
protected $errorBag = 'otherbag';
public function rules(){
return [
'my_field' => 'required'
];
}
}
В моем тестовом файле я тестирую, используя это:
/* ExampleTest.php */
class ExampleTest extends TestCase {
public function testPostWithoutData(){
$response = $this->call('POST', 'url/to/post',[
'my_field' => ''
]);
$this->assertSessionHasErrors('my_field');
}
}
Если я запускаю тесты, он не может получить правильное утверждение и вернуть эту проблему:
Ошибка сеанса:
my_field
Не удалось утверждать, чтоfalse
являетсяtrue
,
Если я достану $errorBag
Атрибут из файла запроса у меня проблем нет.
Я могу дать больше деталей по мере необходимости.
Вы можете получить альтернативную сумку в магазине сессий, например так:
$myBag = $this->app('session_store')->getBag('otherBag');
$this->assertTrue($myBag->any());
Однако Laravel по умолчанию не использует альтернативную сумку, поэтому я предполагаю, что вы делаете что-то в своем коде, чтобы зарегистрировать свой App\Request::$errorBag
с обработчиком сеанса.
Я не знаю, проводите ли вы сеанс в другом месте, но я думаю, вы можете сделать что-то вроде:
$this->session(['foo' => 'bar']);
Прежде чем вы сможете утверждать что-то в сессии. Смотрите раздел помощников по тестированию для Laravel 5.0