PHPspec присваивает значение и тестирует обновление

У меня есть следующий класс

class Customer {}

и у него есть такие свойства, как Id, Name, City и Country, и такие методы, как findById и findByCity. Я хочу написать специальный тест, который проверит, что моя функция Customer::save() работает следующим образом.

function it_should_update_customer_name_on_save()
{
$customer = $this->findById(1);
$customer->Name = 'Compu-Global-Hyper-Mega-Net';
$customer->save();

$this->findById(1)->shouldReturn('Compu-Global-Hyper-Mega-Net');
}

но phpspec продолжает возвращать мне эту ошибку

! it should update name on save (111ms)
        error: Argument 1 passed to PHPSpec2\Wrapper\ArgumentsUnwrapper::unwrapAll() must be of the type array, string given,
        called in /Users/kristiannissen/Documents/php/phpecosrv/vendor/phpspec/phpspec2/src/PHPSpec2/Prophet/ObjectProphet.php
        on line 126 and defined in
        /Users/kristiannissen/Documents/php/phpecosrv/vendor/phpspec/phpspec2/src/PHPSpec2/Wrapper/ArgumentsUnwrapper.php line
        10

как мне выполнить такой тест?


person kristian nissen    schedule 17.05.2015    source источник
comment
Если это не тонна кода, не могли бы вы дать нам достаточно, чтобы воспроизвести ошибку самостоятельно? :)   -  person Marc    schedule 18.05.2015
comment
$customer = $this->findById(1); возвращает новый экземпляр Customer(). Но как бы вы сделали такой тест в phpspec? 1) найти существующий объект, 2) изменить его значения, 3) сохранить его, 4) проверить, произошло ли изменение   -  person kristian nissen    schedule 18.05.2015
comment
@kristiannissen Я предлагаю вам сначала прочитать руководство по phpspec. Кажется, вам не хватает довольно основных понятий: phpspec.net/en/latest/manual /introduction.html Читайте также: techportal.inviqa.com/2013/07/23/   -  person Jakub Zalas    schedule 18.05.2015


Ответы (1)


Вы выполняете интеграционный тест между вашей моделью и базой данных, это не цель phpspec. Ответственность за сохранение клиента в любом случае не должна быть внутри класса клиента, она должна быть в доменной службе. findById должен выполняться классом репозитория, а save - классом менеджера сущностей, внедрять оба и имитировать их.

person gvf    schedule 20.06.2015