【问题标题】:Testing Laravel models with relations in repositories and phpspec使用存储库和 phpspec 中的关系测试 Laravel 模型
【发布时间】:2015-02-14 18:37:48
【问题描述】:

我有一个 EloquentUserRepository,我想测试它的方法,但我真的不知道从哪里开始。任何人都可以为此提供任何启示?

public function findByProvider($provider, $user)
{
    if (is_object($user))
    {
        $user = $user->id;
    }

    return $this->instance()->whereHas('socialProviders', function ($q) use ($provider, $user)
    {
        $q->where('name', $provider);
    })->first();
}

这是我想测试的功能示例。它正在寻找拥有一个 socialProvider 的用户,比如 github。具有社交提供者的用户的基本结构是这样的:

$data = [
        'user' => [
            'id' => 1,
            'email' => 'test@test.com',
            'socialProvider' => [
                [
                    'name' => 'github',
                    'provider_id' => '00000000'
                ]
            ]
        ]
    ];

设置了这个,如何基于这个结构来测试模型呢?是否真的需要为此目的创建内存数据库、迁移和种子,或者可以在没有它的情况下进行测试?

由于 laracasts 视频,我正在使用 phpspec,但我不确定这是否是正确的选择...希望你们中的一些人可以提供帮助!

【问题讨论】:

  • 您需要提供有关 findByProvider 方法所属的类的更多信息。

标签: testing laravel repository eloquent phpspec


【解决方案1】:

Israel,我知道这是一个较旧的线程,但这可能会对将来的某人有所帮助。在您的情况下,最好使用 Codeception 之类的东西,因为您使用的是 Eloquent 提供的方法。 根据我对 Eloquent 模型进行测试的经验,事实证明是非常难以测试的。您最终会在测试中编写您尝试测试的方法的整个逻辑,这并不好。

基本上,您可以假设 Eloquent 已经过正确测试并且方法按预期运行,您的测试应该只断言此方法将返回您描述的特定数据集。

使用 Codeception 进行测试将证明是一项更容易的任务,并且允许您根据各种数据状态测试各种场景。

希望这对您和未来的读者有所帮助。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 2015-08-25
    • 2019-12-11
    • 2014-09-19
    • 2015-10-21
    • 2018-08-27
    • 2015-06-15
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多