Phpspec匹配失败,使用stdClass对象

时间:2015-03-21 11:10:38

标签: laravel phpspec

使用laravel 5 app并遇到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我得到以下回复:

应用/库/ 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 个答案:

答案 0 :(得分:2)

shouldReturn()调用使用严格比较的identity matcher。您的规范失败,因为您期望的对象与从该方法返回的对象不同。

请改用comparison matcher。它使用弱比较,可以使用 shouldBeLike()

调用
function it_checks_add_starting_date_to_flow()
{      
    $dealflows = new \stdClass();
    $this->add_starting_date_to_flow($dealflows)->shouldBeLike((object)[]);
}