Сбой сопоставления Phpspec с объектом stdClass

Работа с приложением laravel 5 и проблема с phpspec. Почему мой тестовый модуль Phpspec, приведенный ниже, не проходит, или, точнее, как я могу заставить ключи объекта stdClass соответствовать, чтобы он не потерпел неудачу?

Мой файл спецификаций:

function it_checks_add_starting_date_to_flow()

    {      
    $dealflows = new \stdClass ();
    this->add_starting_date_to_flow($dealflows)->shouldReturn((object)[]);

    }

И моя вспомогательная функция, которую я тестирую:

public static function add_starting_date_to_flow($dealflows)
    {

    $dealflows= new \stdClass();
    return $dealflows;
    }

Из phpspec я получаю следующий ответ:

App/ библиотеки / Mmdealhelpers
65 - он проверяет добавление даты начала к ожидаемому потоку [obj:stdClass], но получил [obj:stdClass].

  @@ -1,1 +1,1 @@
  -stdClass Object &000000001d025295000000007dd68060 ()
  +stdClass Object &000000001d02529a000000007dd68060 ()


    80 //                    ]
    81 //                    ));
    82                       $this->add_starting_date_to_flow($dealflows)->shouldReturn((object)[]);
    83 
    84         }
    85 


   0 vendor/phpspec/phpspec/src/PhpSpec/Matcher/IdentityMatcher.php:78
     throw new PhpSpec\Exception\Example\NotEqualException("Expected [obj:stdC...")
   1 [internal]
     spec\App\libraries\MmdealhelpersSpec->it_checks_add_starting_date_to_flow()

1 ответ

Решение

shouldReturn() вызывает совпадение идентификаторов, которое использует строгое сравнение. Ваша спецификация не работает, так как ожидаемый объект не совпадает с экземпляром, возвращаемым методом.

Вместо этого используйте сопоставитель сравнения. Он использует слабое сравнение и может быть вызван с помощью shouldBeLike ():

function it_checks_add_starting_date_to_flow()
{      
    $dealflows = new \stdClass();
    $this->add_starting_date_to_flow($dealflows)->shouldBeLike((object)[]);
}
Другие вопросы по тегам