无法断言两个数组相等,但表明数组相同但没有区别吗?

时间:2019-02-07 19:54:16

标签: php arrays symfony phpunit

我正在尝试通过一项涉及运行查询的测试,该查询返回一系列登录以测试测试中两个数组是否相等。

过去,我曾尝试更改查询的格式以通过测试以及编辑数组,最终使其等于两个数组。不幸的是,测试仍然没有通过。

执行查询以获取一系列登录日期的函数:

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");
}

我期望测试通过,但它显示以下内容:

Test Output

期望数组和实际数组都相等,所以我不确定导致测试失败的原因。

1 个答案:

答案 0 :(得分:0)

\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']);
}