Mockery:check参数至少传递一次?

时间:2017-03-17 09:31:14

标签: php testing mockery

我正在寻找一些看起来很平常但却无法在Mockery中找到内置解决方案的东西。

示例测试将是这样的:

<?php
$user = factory(App\User::class)->create(['birthday' => Carbon::now()->subYear(20)]);
$this->mailer->shouldReceive('sendBirthdayEvent')
             ->with(hasEntry("id", $user->id)); // Will fail if DB is seeded
$this->command->sendBirthdayEventToAllUSers();

我想检查sendBirthdayEvent是否会调用我刚刚创建的二次使用。 问题是我无法使用with,因为我的数据库可能会在该点播种,其他用户也可能在同一天生日。

到目前为止,我一直想到的“更聪明”的解决方案是做这样的事情:

<?php
$success = false;
$this->mailer->shouldReceive('sendBirthdayEvent')
             ->with(function($user_id) use($success) {
    if($user_id) === $user->id { 
        $success = true:
    }
    return true;
});
assert($success,true);

但我觉得我在这里真的错过了什么。

1 个答案:

答案 0 :(得分:1)

试试这个:

$this->mailer->shouldReceive('sendBirthdayEvent')->with($user->id)->once();