Контроллер, который вы написали, немного сложен для тестирования, так как он тесно связан с моделью Eloquent
. Вам лучше отделить его, добавив слой репозитория и вставить его в свой контроллер.
Кстати: вы можете использовать атрибутов , чтобы избежать написания большого количества кода, просто чтобы заполнить атрибуты вашего BookingForm
Теперь, например, вы можете сделать следующее:
Создать интерфейс BookingFormRepository:
interface BookingFormRepository
{
public function all();
public function create(array $attributes);
// etc ....
}
Создать реализацию BookingFormRepository
:
class BookingFormRepositoryImpl implements BookingRepository
{
public function all()
{
return BookingForm::all();
}
public function create(array $attributes)
{
// Use fillable attributes for better readability
$record = BookingForm::create($attributes);
return $record;
}
// Implement other methods ....
}
В AppServiceProvider
в методе register
свяжите свою реализацию:
App::bind(BookingFormRepository::class, BookingFormRepositoryImpl::class);
Затем в свой контроллер введите интерфейс BookingRepository
:
class BookingFormController extends Controller {
private $bookingFormRepository;
public function __construct(BookingFormRepository $bookingRepo)
{
$this->bookingFormRepository = $bookingRepo;
}
public function index()
{
$bookings = $this->bookingFormRepository->all();
return view('bookingform.index', $bookings);
}
// .. other methods ... like `store`
}
Теперь контроллер будет легко тестировать, просто смоделируйте BookingRepository
и сделайте на нем утверждения вызова:
class BookingFormControllerTest extends TestCase
{
public function testIndexBookingForm()
{
// Arrange
$repository = Mockery::mock('BookingRepository');
$repository->shouldReceive('all')->once()
->andReturn(['foobar']);
App::instance('BookingRepository', $repository);
// Act, Replace with your right url ...
$this->get('bookings');
// Assert
$this->assertResponseOk();
$this->assertViewHas('bookingforms.index', ['foobar']);
}
}
Я рекомендую прочитать книгу Тейлора Отвелла "Laravel от ученика до Ремесленника".