Twitt
@Twitt

Как сделать юнит тест методов, в которых один из аргументов Yii::$app->user->identity->id?

Есть кусок старого кода:
public static function subscribe($id) { // Нажата кнопка подписки
            if (Relation::findSubscribe($id)) {
                $relation = new Relation();
                $relation->first_id = Yii::$app->user->identity->id;
                $relation->second_id = $id;
                $relation->type = 1; // тип 1 - подписка
                return $relation->save();
            } else {
                return null;
            }
        }
   }

Я хочу сделать для него юнит тест, (а я с ними только сегодня начал знакомство), я планировал сделать вот такое:
public function testSubscribe()
    {
        $this->assertNull(\app\models\Relation::subscribe(2));
    }

Но выбило ошибку, и я не могу понять, каким будет правильный код для юнит теста метода subscribe? Даже если передадим первый параметр произвольный, второй параметр Yii::$app->user->identity->id, который по моему усложняет процесс, потому что ID может быть неизвестен.
Ошибка, кстати, отдалась такая:
Test tests\unit\RelationTest.php:testSubscribe

[yii\base\ErrorException] Trying to get property of non-object
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
ну тут есть два варианта:
1. Либо на уровне теста формировать объект User со всей соответствующей информацией и заменять его в приложении
2. Либо передавать идентификатор пользователя в объект в конструкторе/при вызове метода

P.S. а вообще как бы код не должен быть завязан Yii::$app->user и прочие подробные штуки ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы