LARAVEL 5.0 + Unit Test — assertSessionHasErrors с разными сумками

Я пишу модульный тест в 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 Атрибут из файла запроса у меня проблем нет.

Я могу дать больше деталей по мере необходимости.

5

Решение

Вы можете получить альтернативную сумку в магазине сессий, например так:

$myBag = $this->app('session_store')->getBag('otherBag');
$this->assertTrue($myBag->any());

Однако Laravel по умолчанию не использует альтернативную сумку, поэтому я предполагаю, что вы делаете что-то в своем коде, чтобы зарегистрировать свой App\Request::$errorBag с обработчиком сеанса.

2

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

Я не знаю, проводите ли вы сеанс в другом месте, но я думаю, вы можете сделать что-то вроде:


$this->session(['foo' => 'bar']);

Прежде чем вы сможете утверждать что-то в сессии. Смотрите раздел помощников по тестированию для Laravel 5.0

0

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