0

我有一个多态的多对多User/ Location-Group关系,但我有时间让基本的单元测试通过。

/** @test */
public function it_can_have_groups()
{
    $user = factory(User::class)->create();
    $group = factory(Group::class)->create();

    $user->addToGroup($group);
    $this->assertCount(1, $user->groups);  // true

    $user->removeFromGroup($group);
    $this->assertCount(0, $user->groups);  // false
}

这些方法只是根据文档attach调用和:detach

要删除多对多关系记录,请使用分离方法。detach 方法会从中间表中删除相应的记录;但是,这两个模型都将保留在数据库中

public function addToGroup(Group $group)
{
    $this->groups()->attach($group->id);
}

public function removeFromGroup(Group $group)
{
    $this->groups()->detach($group->id));
    dump($group->users());                 // []
}

所以它似乎有效(?),但仅从团体方面来看,断言仍然失败。为什么,我应该做些什么不同的事情?

4

1 回答 1

1

它可能与您正在测试的具有陈旧关系的模型一样简单。试试这个:

/** @test */
public function it_can_have_groups()
{
    $user = factory(User::class)->create();
    $group = factory(Group::class)->create();

    $user->addToGroup($group);
    $this->assertCount(1, $user->groups->fresh());  // true

    $user->removeFromGroup($group);
    $this->assertCount(0, $user->groups->fresh());  // false
}
于 2020-03-12T23:26:43.020 回答