Не удалось утверждать, что два массива равны, но показывает, что массивы одинаковы без разницы? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь пройти тест, который включает в себя выполнение запроса, который возвращает серию имен входа, чтобы проверить, равны ли два теста в тесте.

В прошлом я пытался изменить форматзапрос на прохождение теста, а также редактирование массивов и в итоге он равняется двум массивам.К сожалению, тест по-прежнему не проходит.

Функция, которая выполняет запрос для получения серии дат входа в систему:

public function getLogins(): array
{
  return $this->createQuery()
    ->select('date AS datetime, COUNT(id) as total')
    ->orderBy('datetime', 'DESC')->groupBy('datetime')
    ->where('date >= -24 hours')
    ->getQuery()
    ->getResult();
}

Это метод в классе теста:

public function testGetLogins()
{
  $dateLogins = $this->repository->getLogins();

  $this->assertCount(4, $dateLogins, "Four instances");
  $this->assertEquals([
        ["datetime" => new \DateTime("now -3 minutes"), "total" => "1"],
        ["datetime" => new \DateTime("now -7 days"), "total" => "1"],
        ["datetime" => new \DateTime("now -1 year"), "total" => "1"],
        ["datetime" => new \DateTime("now -600 days"), "total" => "1"]
    ], $logins, "The login instances returned match the expected times");
}

Я ожидаю, что тест пройден, но вместо этого он показывает это:

Результат теста

Ожидаемый и фактический массивы равныпоэтому я не уверен в том, что вызывает сбой теста.

1 Ответ

0 голосов
/ 08 февраля 2019
Формат

\DateTime также содержит информацию о секундах.new \DateTime("now -3 minutes") вернет now минус 3 minutes, но точное количество seconds, которое всегда будет различным, в зависимости от времени, когда вы запускали тест.Очевидно, вы хотите сравнить даты с минутами, поэтому вам нужно форматировать даты перед сравнением, поэтому вы должны сравнивать каждый набор отдельно:

$expectedValues = [
    ["datetime" => new \DateTime("now -3 minutes"), "total" => "1"],
    ["datetime" => new \DateTime("now -7 days"), "total" => "1"],
    ["datetime" => new \DateTime("now -1 year"), "total" => "1"],
    ["datetime" => new \DateTime("now -600 days"), "total" => "1"]
];

for ($i = 0; $i < count($expectedValues); ++$i) {
    $actualDate = (new \DateTime($logins[$i]['datetime']))->format('Y-m-d  H:i');
    $expectedDate = ($expectedValues[$i]['datetime'])->format('Y-m-d  H:i');
    $this->assertEquals($expectedDate, $actualDate);
    $this->assertEquals($expectedValues[$i]['total'], $logins[$i]['total']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...