0
私のコードは次のとおりです。なぜlaravelアサーションがクロージャから呼び出されないのですか?
public function testOne()
{
$mail = ['subject' => 'My subject'];
$this->assertEquals(1, 1);
$mock = Mockery::mock(\Illuminate\Support\Facades\Mail::getSwiftMailer());
$this->app['mailer']->setSwiftMailer($mock);
$msg = $mock->shouldReceive('send')->once()->andReturnUsing(function($msg) {
echo $msg->getSubject();
$this->assertEquals($mail['subject'], $msg->getSubject());
});
$this->assertEquals(1, 1);
}
私は出力を得る:
PHPUnit 4.8.24 by Sebastian Bergmann and contributors.
My subject
Time: 852 ms, Memory: 26.00Mb
OK (1 test, 2 assertions)
を私は出力から参照してください。私は、なぜ、良い件名を取得しますが、何もアサートされていない
echo $msg->getSubject();
?あなたのclosure
インサイドこの
public function testOne()
{
$mail = ['subject' => 'My subject'];
$this->assertEquals(1, 1);
$mock = Mockery::mock(\Illuminate\Support\Facades\Mail::getSwiftMailer());
$this->app['mailer']->setSwiftMailer($mock);
$obj = $this;
$msg = $mock->shouldReceive('send')->once()->andReturnUsing(function($msg) use ($obj, $mail) {
echo $msg->getSubject();
$obj->assertEquals($mail['subject'], $msg->getSubject());
});
$this->assertEquals(1, 1);
}
よう
何らかのエラーがクロージャの内部で発生した場合があり、それが真実であるように偽のアサーションが閉鎖laravel印刷の内側があれば、あなたのソリューションとの奇妙なエラーは、ある....そしてより... – fico7489
あなたはあなたのテストを書き直すこともできます。 @ fico7489 –
2番目のスニペットは "class Mockery \ CompositeExpectation"オブジェクトではなく文字列を返します。 – fico7489