【发布时间】:2016-02-28 20:22:14
【问题描述】:
User.php - 非常普通的 hasMany 关系:
public function transactions()
{
return $this->hasMany('App\Transaction');
}
UserTest.php:
public function testTransactionsAttribute()
{
$user = Auth::user();
// Verify logged in user is expected user.
$this->assertTrue($user->username == 'something');
// Pay something.
$transaction = $user->payMembershipFee();
// Verify transaction is in database
$this->seeInDatabase('transactions', ['amount' => 50, 'user_id' => $user->id]);
// Verify transaction belongsTo relationship
$this->assertTrue($transaction->user->username == 'something');
// Verify user hasMany relationship - fails
$this->assertTrue($user->transactions->count() > 0, 'The user should have at least one transaction associated.');
}
这里是有趣的地方(我没有修改数据库表 - 只是离开 PHPUnit 并切换到 Tinker):
$ php artisan tinker
抓取用户(已验证是从测试创建的同一用户):
$user = App\User::first()
复制/粘贴断言:
$user->transactions->count()
=> 1
此外,当我在本地手动完成这些步骤时 - 它可以工作。因此,看起来 Laravel 5.2 正在按预期运行。但是,PHPUnit 不是。
我想知道我是否可能在 Laravel 5.2 和 PHPUnit 相互协作的方式中遗漏了什么?
【问题讨论】:
-
如果将 $user = $user->fresh(); 放在最后一个断言之前会发生什么?我怀疑除非获取新实例,否则事务可能不会同步。
-
感谢@macghriogair 让我走上了正确的道路。非常感谢。如果您想要功劳,我将非常乐意将其提供给您-只需发布与我写的答案相似的答案-扩展您的评论。再次感谢 - 救命稻草。
-
没关系,很高兴我能帮上忙 :)
标签: php laravel laravel-5 phpunit