Насмешка над представлением в Laravel

Я только начал с издевательства. Я пытаюсь высмеять свое мнение в Laravel, но не могу понять это правильно. Это то, что у меня есть ..

Действие контроллера:

public function signup()
{
    return View::make(
        'account.signup',
        array(
            'pageHeading'   => 'Signup',
            'profileTypes'  => $this->profileTypeRepository->all()
        )
    );
}

Тестовое задание:

public function testSignupView()
{
    $this->profileTypeRepositoryInterfaceMock
        ->shouldReceive('all')
        ->once()
        ->andReturn($this->mock('Illuminate\Database\Eloquent\Collection'));

    View::shouldReceive('make')
        ->once()
        ->with('account.signup', array(
            'pageHeading' => \Mockery::type('string'),
            'profileTypes' => $this->profileTypeRepositoryInterfaceMock
        ));
}

Однако это не работает:

1) AccountControllerTest::testSignupView
Mockery\Exception\NoMatchingExpectationException: No matching handler found for     Mockery
public function signup()
{
    return View::make(
        'account.signup'
    )->with('pageHeading', 'Signup')
     ->with('profileTypes', $this->profileTypeRepository->all());
}
Illuminate_View_Factory::make("account.signup", array('pageHeading'=>'Signup','profileTypes'=>'object(Mockerywith()Illuminate_Database_Eloquent_Collection)',)). Either the method was unexpected or its arguments matched no expected argument list for this method

Если я назначу данные представлению с помощью метода with(), я могу протестировать его следующим образом:

Действие контроллера:

public function signup()
{
    return View::make(
        'account.signup'
    )->with('pageHeading', 'Signup')
     ->with('profileTypes', $this->profileTypeRepository->all());
}

Тестовое задание:

public function testSignupView()
{
    View::shouldReceive('make')
        ->once()
        ->with('account.signup')
        ->andReturn(\Mockery::self())
        ->shouldReceive('with')
        ->with('pageHeading', \Mockery::type('string'))
        ->andReturn(\Mockery::self())
        ->shouldReceive('with')
        ->with('profileTypes', \Mockery::any());

    $this->get('signup');
}

Однако я не хочу этого делать; Я хочу передать полный массив данных в качестве второго аргумента.

Как я могу проверить представление, передавая данные в качестве второго аргумента фасада представления?


person James    schedule 10.08.2014    source источник


Ответы (1)


Похоже, что проблема заключается в ->with('profileTypes', $this->profileTypeRepository->all()); в контроллере. функция all () возвращает красноречивую коллекцию, и в вашем тесте $this->profileTypeRepositoryInterfaceMock, вероятно, не является красноречивой коллекцией, поэтому вы получаете исключение NoMatchingExpectationException.

Вы захотите изменить ожидание для profileTypes так, чтобы оно ожидало красноречивой коллекции.

person A-Tran    schedule 11.08.2014