Отношения модели модульного тестирования в Laravel

В моем приложении у меня есть отношения «многие ко многим» между пользователями и организациями,

Пользователь

public function organisations()
{
    return $this->belongsToMany('App\Organisation')->withPivot(['owner']);
}

Организация

public function users()
{
    return $this->belongsToMany('App\User')->withPivot(['owner']);
}

В этих отношениях есть сводная колонка, чтобы указать, является ли пользователь владельцем организации или нет.

Я изо всех сил пытаюсь проверить отношения, мой тест возвращается,

Не удалось подтвердить, что null соответствует ожидаемому 1. Ожидаемый: 1 Фактический: null

Вот моя тестовая функция,

public function testUserHasOwnershipOfOrganisations()
{
    $userRow = factory(User::class)->create();
    $organisation = factory(Organisation::class)->create();
    $userRow->organisations()->attach($organisation->id, ['owner' => true]);
    $user = User::first();
    $ownOrganisations = $user->organisations()->wherePivot('owner', true);
    $this->assertEquals($organisation->id, $ownOrganisations->first()->organisation_id);
}

Мыслительный процесс вышеизложенного состоит в том, чтобы создать пользователя, создать организацию, создать отношения. Запросите первого пользователя в таблице, получите его организации и убедитесь, что организация в отношениях организации имеет тот же идентификатор, что и тот, который я только что создал.

Может ли кто-нибудь сказать мне, почему это не работает, как я ожидал?

Спасибо


person Udders    schedule 03.08.2019    source источник


Ответы (1)


ОБНОВИТЬ:

Также проверьте это:

$ownOrganisations->first()->organisation_id

Наверное, должно быть так:

$ownOrganisations->first()->id

/КОНЕЦ ОБНОВЛЕНИЯ

Единственная проблема, которую я вижу, связана с этой строкой кода:

$user = User::first();

Это зависит от того, как настроена ваша тестовая среда, но нет никакой гарантии, что ваш вновь созданный пользователь будет первым в таблице. Я бы предложил сделать что-то более явное:

$user = User::find($userRow->id);

Также дважды проверьте свои фабрики, чтобы убедиться, что они не добавляют модели в эту связь самостоятельно. Если они это сделают, вы должны принять это во внимание при извлечении ваших моделей.

person gere    schedule 03.08.2019